PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2012/05/09 17:50:40
Name 이헌민
Subject 자바 접근지정자 관련 질문입니다.
자식클래스가 부모클래스를 상속 받았을때,
부모클래스의 메소드를 자식클래스에서 오버라이딩하는경우
접근지정자는 같거나 넓어야 한다고 책이나 자료에 나오는데
왜 그런지 이유가 나와있지는 않더라구요.
변수같은 경우에는 상속받은후에 private로 지정하던 어떻게 하던 상관이없는데
메소드는 왜 그런지 궁금합니다.

메소드나 변수를 호출하면 일단 현재 클래스에서 찾아보고 없으면 부모클래스로 올라가서 찾기때문에
변수는 현재클래스에 존재하면 해당 변수를 찾게되고 없으면 부모클래스에서 찾게 되는데 이때 접근지정자에 따라
접근이 가능하냐 가능하지않냐가 정해지는걸로 알고 있습니다.이렇게 이해하면 변수는 이해가 되는데 메소드는
왜 그런지 이해가 안되더라구요.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
Bayer Aspirin
12/05/09 18:02
수정 아이콘
저도 헷갈리게 만들어 주시네요.
우선 변수도 상속받을 수 있나요?

case 2:
When you override a member variable in a child class (actually its hiding, not overriding),
which version of that variable will be called depends on the reference, the object, unlike method lookup.

In your sample code, variable a and b are not actually member variable,
they are class variable since static.
Lets change the sample code a bit,
making the 'a' in class 'A' public and adding some test code in main.

출처 : http://kldp.org/node/110902

그리고 메서드 상속에 대해서는 당연하다고 생각했습니다.
제가 이해한 이유는 상속이라는 것이 확장의 개념이라고 이해했습니다
부모의 기본적인 기능을 하고, 내 입맛에 맞는 기능을 추가하는 오버라이딩이 주 목적이라고 봤고,
그럼, 당연히 메서드 상속은 부모의 기본적인 기능이 할 수 있도록 접근권한이 같거나
기능을 추가하는 오버라이딩이 들어가게되면 접근권한이 커질 수 있다고 생각했습니다.

우선 이글을 한 번 보시길 바랍니다. 오버라이딩과 오버로딩부분을..
http://babcider.tistory.com/54

음 추가적으로 문법적으로 안맞아서 그런거 같습니다.
A.methodA() 클래스 A가 있고, 그 안에 methodA가 있습니다.
클래스 B에서 A를 상속하고 methodA()를 오버라이딩한다고 치면,
기본적으로 super.methodA()가 동작해야합니다.
하지만 A.methodA()는 public인데, B.methodA()는 private이면
문법상 맞지 않다고 생각합니다.
Monde Grano
12/05/09 18:13
수정 아이콘
변수는 상속 안됩니다.
메소드는 클래스가 수퍼클래스로 캐스팅되었을 때에도 권한의 문제 없이 호출되어야 하기 때문에 권한을 줄이면 안됩니다.
JavaBean
12/05/09 23:06
수정 아이콘
접근제한자가 넓어지는 이유는 당연합니다.
객체지향의 4대 특징중, 상속(Inheritance)이라는 개념을 사용할 때, 자바에서는 extends 키워드를 씁니다.
클래스를 확장해서 하나 더 만든다는 것이죠.
public 을 private 으로 바꾸는건 확장이 아니라 축소 입니다.

그리고 객체지향 특징, 원칙 상 (Java 역시 이에 따라 다형성을 지원하고 있고) 슈퍼클래스를 통해 사용한 기능은 이를 상속한 클래스에서도 당연히 되어야 합니다.

예를 들면 이런거죠.

Alphabet a = new Alphabet();
a.doSomething();

이라는 코드가 있다고 합니다.
그리고, Alphabet 을 상속받은 클래스 Alpha 와 Beta 가 있다고 칩시다.

그러면,
Alphabet a = new Alphabet(); 이 부분을
Alphabet a = new Alpha(); 혹은 Alphabet a = new Beta(); 로 변환해도
아래쪽의 a.doSomething(); 이라는 코드는 잘 돌아가야 한다는 뜻이 됩니다.

만약에 Alphabet 의 doSomething() 메소드는 public 이었는데,
Alpha 나 Beta 클래스에서 이를 private 으로 바꾸는 것이 가능하다면 다형성에 기반한 코딩을 안정적으로 지원하지 못하게 됩니다.

잘 동작해야 한다는 의미는, 치환해도 컴파일 상 오류가 없다는 뜻 정도로 받아들이면 됩니다.

객체지향의 4대 특징과 5대 원칙에 대해서 심도있게 찾아보시기 바랍니다. ^^;
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
134196 운전면허 관련 질문좀드리겠습니다. [7] polt1525 12/05/09 1525
134195 지금 편입중인데 살때문에 힘이 듭니다. [2] 요우1803 12/05/09 1803
134194 중학생이 할만한 놀이 있을까요?? [1] 방화동김군2365 12/05/09 2365
134193 나이 서른인데 방송댄스가 땡깁니다. [3] 언뜻 유재석4082 12/05/09 4082
134192 [LOL]리신 운영.. [3] 카스2165 12/05/09 2165
134191 요즘 박진영식단이 인기던데요... 견과류는 아침에먹는게좋을가요? [5] C.K6899 12/05/09 6899
134190 현대 생산 매니지먼트(생산관리) 과목에 대한 자료를 찾습니다. 호로토스1544 12/05/09 1544
134189 다수의 이미지 한꺼번에 업로드 할 수 있는 곳. [4] 현상1614 12/05/09 1614
134188 이정도면 성인병 예약인가요? [11] wjj2401 12/05/09 2401
134187 식단 다시짜보았습니다..... [8] 오른손1852 12/05/09 1852
134186 서초,강남 예비군 훈련장 가는법 [1] 무얼2640 12/05/09 2640
134185 인터넷 야구게임 뭐가 나을까요? [27] honnysun2292 12/05/09 2292
134184 스타2 씨디를 양도받으려고 합니다 [5] 리니시아2058 12/05/09 2058
134183 식단을 짜봤는데요.. 부족하지않은지좀 봐주세요.. [10] 오른손1571 12/05/09 1571
134181 간단한게 라뽁기를 해먹고싶은데 쉽게 만드는 방법 없을까요? [7] 사진2098 12/05/09 2098
134180 자소서쓸때 도움되는 책 뭐가있을까요? [1] 사케행열차1849 12/05/09 1849
134179 전 도데체 무슨 경우인가요. [5] Galaxy10116 12/05/09 10116
134178 유산소 운동할때 들을 만한 음악 추천 부탁드립니다~ [6] 풍운1809 12/05/09 1809
134177 자바 접근지정자 관련 질문입니다. [5] 이헌민1609 12/05/09 1609
134176 스맛폰 야구게임 질문입니다. [4] Go_TheMarine1686 12/05/09 1686
134175 여러분들이라면 어떻게 하실지 궁금합니다. [22] 유안2408 12/05/09 2408
134174 캐치볼용 야구 글러브 추천 부탁드립니다 ^^ [7] 몽유도원2809 12/05/09 2809
134173 로봇 SF 소설 질문입니다~ [4] BANANA1274 12/05/09 1274
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로