문제
다음 Java 코드의 실행 결과를 쓰시오.
Javainterface A { int x = 10; default void show() { System.out.print("A" + x); } } interface B extends A { int x = 20; default void show() { System.out.print("B" + x); } } abstract class C implements B { int x = 30; void display() { System.out.print("C" + this.x); } } class D extends C implements A { int x = 40; void show() { System.out.print("D" + super.x); } void display() { System.out.print("D" + A.x + B.x); } } public class Main { public static void main(String[] args) { A a = new D(); B b = new D(); C c = new D(); a.show(); System.out.print(" "); b.show(); System.out.print(" "); c.display(); } }
정답
D30 D30 D1020
D30 D30 D1020D30D1020
해설
- a.show(): D 객체의 show() 메서드가 호출되고, super.x는 C 클래스의 x=30을 참조하여 "D30" 출력
- b.show(): 동일하게 D 객체의 show() 메서드가 호출되어 "D30" 출력
- c.display(): D 객체의 display() 메서드가 호출되고, A.x=10, B.x=20을 참조하여 "D1020" 출력. 인터페이스 필드는 인터페이스명.필드명으로 명시적 접근