문제
다음 Java 코드의 실행 결과를 쓰시오.
Javainterface A { String name = "A"; default String getName() { return name + "Method"; } } interface B { String name = "B"; default String getName() { return name + "Method"; } } abstract class C { String name = "C"; abstract String getName(); } class Test extends C implements A, B { String name = "Test"; public String getName() { return A.super.getName() + this.name; } } public class Main { public static void main(String[] args) { A a = new Test(); C c = new Test(); System.out.println(a.name + " " + c.getName()); } }
정답
A AMethodTest
A AMethodTestAAMethodTest
해설
a.name은 인터페이스 A의 상수 "A"를 정적 바인딩으로 접근. c.getName()은 Test 클래스의 오버라이딩된 메서드를 동적 바인딩으로 호출. A.super.getName()은 "AMethod"를 반환하고 this.name은 "Test"(Test 객체의 필드)를 참조하여 "AMethodTest" 반환.