관련 이론 및 문법

(기본 생성자, 상속시 부모 생성자 호출, super 참고)

http://kkikkodev.tistory.com/87


문제 의도

주어진 소스코드를 컴파일하여 실행하면 어떤 결과가 나오는지 고르는 문제입니다.


답안

F


풀이 방법

소스코드를 보면, Atom 클래스가 있고, 이를 상속하는 Rock 클래스가 있고, 또 이를 상속하는 Mountain 클래스가 있습니다. 각각 생성자들이 정의되어 있습니다. Atom 클래스는 기본 생성자, Rock 클래스는 String type 을 매개변수로 가지는 매개변수 생성자, Mountain 클래스는 기본 생성자를 가지고 있습니다.


프로그램이 실행되면, Mountain 큺래스 내의 main 메소드부터 시작됩니다. 먼저, 12 라인의 new Mountain() 문장을 통해서 Mountain 클래스의 기본 생성자를 호출합니다. 9 라인으로 넘어가면, super("granite ") 문장을 통해서, Mountain 의 부모 클래스인 Rock 클래스의 String 을 매개변수로 받는 생성자를 호출합니다. 5 라인으로 가면, 우리들 눈에는 보이지 않지만, super() 문장이 자동으로 삽입되어 있기 때문에, 다시 부모 클래스인 Atom 의 기본 생성자를 호출하게 됩니다. 2 라인으로 가면, "atom " 을 화면에 출력합니다. 2 번 라인이 끝나면, 다시 5 라인으로 넘어오게 되고, 매개변수로 받은 String type 을 화면에 출력합니다. 따라서, Mountain 클래스로부터 전달받은 "granite " 문자열이 화면에 출력됩니다. 


5 라인이 끝나면, 다시 10 라인으로 돌아오게 되고, new Rock("granite ") 를 실행하여, Rock 클래스의 매개변수 생성자를 다시 호출합니다. 5 라인으로 건너가면, 또다시, 보이지 않는 super() 문장에 의해서 2 라인으로 넘어가고, 2 라인에서 "atom " 을 화면에 다시 출력합니다. 끝나면, 5 라인으로 돌아오고, 매개변수인 type 을 화면에 출력하여 "granite " 를 출력합니다. 출력이 끝나면, 11 라인으로 돌아오게 되고, Moiuntain 생성자가 종료되어 12 라인 main 메소드로 다시 돌아가게 되고 프로그램을 종료합니다.


결국, atom -> granite -> atom -> granite 의 순서대로 출력이 되고, 이에 해당하는 답안은 F 가 됩니다.


by kkikkodev 2015. 7. 8. 22:19