class AAA{ class BBB extends AAA{ @Override class CCC extends BBB{ @Override class RideAndLoad{ public static void main(String[] args){ 예재가 이건데 이거 실행하면 CCC's Method CCC's Method CCC's Method void Method int Method double Method 이렇게 되네요. 이렇게 되고 밑에 설명이 '오버라이딩 된 상위 클래스의 메소드는 오버라이딩을 한 하위 클래스의 메소드에 의해서 가리워진다. 즉 외부에서는 참조변수를 통해서 오버라이딩 된 상위 클래스의 메소드를 호출할 수 없다.' 이렇게 되있는데 AAA ref1=new CCC(); 이거를 AAA ref1=new AAA(); 이렇게 바꿔주면 출력이 CCC's Method CCC's Method CCC's Method 이게 아니고 AAA's Method BBB's Method CCC's Method 이렇게 나오네요. 음.. 그러니까 이게 가리워 진다길레 바꿔도 출력 결과 안바뀔줄 알았는데 바뀌더군요. 설명 보니까 아예 가리워져서 외부에서 호출할 수 없다 이러는거 같은데.. 그리고 AAA ref1= new CCC(); 여기에서 new CCC();이 부분이 그냥 객체의 메모리 공간만 할당하는거 아닌가요? 실제로 ref1이 참조하는건 AAA이고요. 그러니까 CCC에 AAA와 BBB에 없는 메소드를 생성해도 ref1에서는 그 메소드를 호출할 수 없는거처럼.. 즉, 여기서 AAA ref1 = new CCC();에서 CCC를 AAA로 바꿔주는건 '오버라이딩 된 상위 클래스의 메소드는 오버라이딩을 한 하위 클래스의 메소드에 의해서 가리워진다. 즉 외부에서는 참조변수를 통해서 오버라이딩 된 상위 클래스의 메소드를 호출할 수 없다.' 이 문장에 영향력을 끼치는 부분은 없는거 같다고 생각되거든요. 제 생각에는요. CCC만큼의 메모리 공간을 할당한다 에서 AAA만큼의 메모리 공간을 할당한다로 바꿔주는거니까요. 되게 써보니까 글이 이상하는거 같긴한데.. 위에 제가 싸질러놓은거 이해 안가시는 분은 그냥 new CCC();를 new AAA();로 바꿨을 때 왜 출력물이 바뀌는지만 알려주세요. 책에 보니까 가려진다고 하는데... 알려주시면 감사하겠습니다. |
똑같은글 또올리네
누가 좀 알려주세요....ㅜㅜ 당연한거라 그냥 받아들여야 되는 건가요???
말그대로 가린다고 생각하시면 안될까요? 저도 이제 다시 복습중인 입장이지만요.... 객체를 참조할때 CCC에서 하면 BBB와 AAA의 메소드들이 CCC의 메소드에 가려져서 안보이는거죠 AAA와 BBB의 메소드 자체를 변형시키는게 아니고요
전 이런식으로 이해 했습니다.
오버라이딩하면 가장 마지막꺼 나오는게 맞고 부모꺼 부를라면 super.메서드
다형성 한번 읽 ㄱ