관련 이론 및 문법

(throws 가 적용된 메소드 overriding 참고)

http://kkikkodev.tistory.com/294


문제 의도

주어진 소스코드를 컴파일하여 실행한 결과를 고르는 문제입니다.


답안

A


풀이 방법

소스코드를 살펴보면, static class A 가 있고, (아마 어딘가에 nested 상태로 존재할 것입니다. 왜냐하면 static 외부 클래스는 존재하지 않는 문법이기 때문입니다.) 그 안에 process 메소드가 Exception 을 throws 하고 있습니다. 그리고 B 클래스는 A 클래스를 상속하면서 process 메소드를 overriding 하고 있습니다.


프로그램이 실행되면, main 메소드가 호출되고, new B().process(); 문을 실행하게 됩니다. 먼저 B 생성자를 호출하여 B 형 객체를 생성하고 바로 process 메소드를 호출합니다. overriding 된 B 클래스의 process 가 호출되어 "B" 를 출력합니다.


여기서 메소드 overriding 이 에러가 안 나는 이유는 부모 클래스인 A 클래스에서 process 메소드에 throws Exception 이 있는데, 자식 클래스인 B 클래스에서 process 메소드에 throws 문이 없기 때문에, 가능합니다. 만약 이와 반대로 부모에는 throws 문이 없었는데, 자식에서 throws Exception (checked Exception) 이 있었다면 컴파일 에러가 났을 것입니다.


따라서 답안은 A 가 됩니다.


by kkikkodev 2015. 9. 10. 00:35