[23년 3회 - 1번]
다음은 Java 코드로 작성한 프로그램이다. 올바른 출력 결과를 작성하시오.
코드 분석
- main 메소드에서 B b = new B();로 B 클래스의 객체 b를 생성합니다.
- b.paint() 호출:
- B 클래스의 paint() 메서드를 실행합니다.
- super.draw()는 부모 클래스 A의 draw()를 호출하여, "B"가 출력됩니다.
- 그다음 System.out.print("C")를 출력하여 "C"가 출력됩니다.
- 마지막으로 this.draw()는 현재 객체 B의 draw() 메서드를 호출하므로 "D"가 출력됩니다.
- b.draw() 호출:
- 이는 B 클래스의 draw() 메서드를 가리키므로, "D"가 출력됩니다.
그런데, 내가 놓친 부분
- A 클래스의 paint() 메서드도 주목해야 합니다. B 클래스에서 paint() 메서드를 오버라이드하기는 했지만, 부모 클래스 A의 paint() 메서드에서 draw()가 호출되는데, 이 호출은 다시 B 클래스의 draw()를 참조합니다.
- 구체적으로, A 클래스의 paint() 메서드에서 draw()를 호출할 때, 이는 동적 바인딩에 의해 B 클래스의 draw()가 호출됩니다. 따라서 "D"가 출력됩니다.
다시 한 번 전체 흐름 정리
- b.paint() 호출:
- super.draw() → "B" 출력 (부모 클래스 A의 draw() 호출).
- System.out.print("C") → "C" 출력.
- this.draw() → "D" 출력 (B 클래스의 draw() 메서드 호출).
- b.draw() 호출:
- B 클래스의 draw() 메서드 호출 → "D" 출력.
- 처음에 호출된 A 클래스의 paint() 메서드에서의 draw() 호출
- 이 호출은 동적 바인딩에 의해 B 클래스의 draw()가 호출되므로, "D"가 출력됩니다.
최종 출력 결과
코드 복사
BDCDD