문제
다음은 Java 코드이다. 올바른 출력 결과를 작성하시오.
정답
BDCDD
BDCDD
해설
참조 변수는 A 타입이지만 실제 객체는 B 이므로 오버라이딩된 메서드는 동적 바인딩으로 B 의 것이 호출된다. b.paint() 는 B.paint() 를 실행한다. super.draw() 는 A.draw() 를 호출해 "B" 출력 후 draw() 를 다시 호출하는데, 이때 draw() 는 동적 바인딩으로 B.draw() 가 실행되어 "D" 가 출력된다(무한 재귀가 아님). 이어 "C" 출력, this.draw() 로 B.draw() 가 실행되어 "D" 가 출력된다. 그 다음 b.draw() 는 B.draw() 로 "D" 를 출력하므로 최종 결과는 BDCDD 이다.