관련 이론 및 문법

(메소드 오버라이딩 (method overriding) 참고)

http://kkikkodev.tistory.com/86


문제 의도

코드를 컴파일한 후 실행한 결과를 고르는 문제입니다.


답안

B


풀이 방법

코드를 살펴보면, 총 2 개의 클래스가 있습니다. 부모 클래스인 TestA, 이를 상속하는 자식 클래스인 TestB 클래스가 있고, TestA 클래스 내에는 start 메소드가 있고, TestB 클래스에서는 이 start 메소드를 overriding 하고 있습니다.


main 메소드가 실행되면, 먼저, new TestB() 문장을 통해서 TestB 클래스형 객체를 힙에 생성하고, TestB 클래스의 기본 생성자를 호출합니다. 그리고, 이 객체를 (TestA) 문장을 통해서 부모 클래스형인 TestA 형으로 강제 형변환합니다. 마지막으로. .start(); 문장을 통해서, start 메소드를 호출합니다. 강제로 부모 형으로 형변환했으므로, 원래대로라면, 부모 클래스인 TestA 클래스의 start 메소드가 호출되어야 할 것이지만, 이 메소드는 자식 클래스인 TestB 클래스에 의해서 overriding 되었기 때문에, 무조건 자식 클래스인 TestB 클래스의 start 메소드가 호출되게 됩니다. 따라서, TestB 가 화면에 출력되게 되어, 답안은 B 가 됩니다.


by kkikkodev 2016. 10. 30. 00:18