관련 이론 및 문법

(인터페이스 (interface) 참고)

http://kkikkodev.tistory.com/260


(추상 클래스 (abstract class) 참고)

http://kkikkodev.tistory.com/83


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

http://kkikkodev.tistory.com/86


(메소드 오버로딩 (method overloading) 참고)

http://kkikkodev.tistory.com/92


문제 의도

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


답안

C


풀이 방법

소스코드를 살펴보면, A 인터페이스, B, C, D 클래스, E, F, G 추상 클래스가 있는 것을 볼 수 있습니다. 먼저 1 번 라인의 A 인터페이스에는, 매개변수가 없는 m1 추상 메소드가 존재합니다. 3 번 라인의 B 클래스는 A 인터페이스를 implements 하고 있고, 클래스 안에는 아무것도 없습니다. A 인터페이스의 m1 메소드가 추상 메소드이기 때문에, 이를 상속하는 클래스에서는, 이를 overriding 해서 내용물을 채우거나, 아니면, 자신도 추상 클래스가 되어서, overriding 을 미루어야 합니다. B 클래스는 일반 클래스인데도 불구하고, m1 메소드를 overriding 하지 않았으므로, 컴파일 에러가 발생합니다.


4 번 라인의 C 클래스는 A 인터페이스를 implements 하고 있고, m1 메소드를 overriding 하고 있으므로, 정상적으로 실행이 됩니다. 5 번 라인의 D 클래스는 A 인터페이스를 implements 하고 있고, m1 메소드를 overloading 하고 있습니다. 매개변수로 int 형 x 를 하나 받고 있으므로, 부모 인터페이스의 m1 메소드와는 매개변수가 다른 m1 메소드이므로, overriding 이 아닌, overloading 을 하고 있다는 것을 알 수 있습니다. 따라서, 이 또한, 일반 클래스인데도 불구하고, m1 메소드를 overriding 하지 않았으므로, 컴파일 에러가 발생합니다.


6 번 라인의 E 클래스는 추상 클래스이고, A 인터페이스를 implements 하고 있습니다. 안의 내용은 아무것도 없습니다. E 클래스는 추상 클래스이므로, 부모의 추상 메소드를 overriding 하지 않아도 됩니다. 따라서, 정상적으로 실행이 됩니다.


7 번 라인의 F 클래스는 추상 클래스이고, A 인터페이스를 implements 하고 있습니다. 안에서는 m1 메소드를 overriding 하고 있습니다. F 클래스는 추상 클래스이므로, 부모의 추상 메소드를 overriding 하지 않아도 됩니다. 하지만, 굳이 overriding 하는 것은 문제가 되지 않습니다. 따라서, 정상적으로 실행이 됩니다.


8 번 라인의 G 클래스는 추상 클래스이고, A 인터페이스를 implements 하고 있습니다. 안에서는, m1 메소드를 overloading 하고 있습니다. G 클래스는 추상 클래스이므로, 부모의 추상 메소드를 overriding 하지 않아도 되므로, 정상적으로 실행이 됩니다.


최종적으로, 컴파일 에러가 나는 클래스는 모두 B 클래스, D 클래스 2 개 이므로, 답안은 C 가 됩니다.


by kkikkodev 2016. 11. 20. 17:11