java 기초 질문입니다. ㅠ.ㅠ
글쓴이: hyunuck / 작성시간: 월, 2004/12/20 - 11:23오전
실제로 이렇게 쓸일은 거의 없을것 같은데요,
책보다보니 궁굼해서 질문드립니다.
3개의 클래스 a,b,c 가 있다고 가정했을때
a
b extends a
c extends b
했을때 b,c 클래스에서 a 에 있는 notice()를 오버라이딩 했다고 가정합니다.
그럼 c 에서
super.notice() 하면 b에 있는 notice() 가 호출되는데,
c 에서 a 에 있는 notice()로 바로 접근하는 방법은 없는지 궁굼합니다.
기분같아서는 super.super.notice()하면 될것같았는데 에러나더군요. ㅋ
혹시 자세히 아시는분은 답변 부탁드립니다.
Forums:
설계를 바꾸세요.c 와 b 의 공통 부분을 뽑아 d 를 만들고
설계를 바꾸세요.
c 와 b 의 공통 부분을 뽑아 d 를 만들고
a
d extends a
b extends d
c extends d
이렇게 하면 될듯합니다.
c, d 는 notice()를 오버라이드하지 않고 b 만 오버라이드하면
님이 원한대로 될 겁니다.
java 기초 질문입니다. ㅠ.ㅠ
이런 식의 구체적으로 찾아가는 것도 괜찮지 않나요?
kldp.net 에 많은 프로그래머들이 동참하기를 바라며...^^
문득 생각이 난 코드인데...[code:1]class c extend
문득 생각이 난 코드인데...
이런 식으론 곤란할까요?
a.notice()메소드가 내부 상태를 바꾸지 않는다면야 별 문제 없이 적용이 가능하지 않을까요. 그렇다면 assign() 메소드는 필요가 없어지죠..
..
질문하신 분의 상황을 고려컨대, 지나치게 상속 구조에 얽매여 있는 것 같
질문하신 분의 상황을 고려컨대, 지나치게 상속 구조에 얽매여 있는 것 같습니다. 다른손님 말씀처럼 상속구조가 너무 깊어지지 않도록 공통 부분을 분리하는 것도 좋은 방법이고, theuhm님 말씀처럼 그냥 위임을 해버려도 됩니다. 위임(delegation)이란 C에 notice 메쏘드 호출을 요청했는데, 정작 C.notice는 A의 notice 메쏘드에게 일을 떠넘기는 것을 말합니다. 코드상의 추함이나 퍼포먼스, 다형성 문제를 제외하면, 위임만으로도 자바의 extends 키워드가 하는 일을 대신할 수 있습니다.
----
http://nohmad.tumblr.com/
댓글 달기