문제
다음 Java 코드의 실행 결과를 쓰시오.
Javainterface A { int value = 10; default String process() { return "A-" + value; } } interface B { int value = 20; default String process() { return "B-" + value; } } abstract class Base { int value = 30; String process() { return "Base-" + value; } } class Child extends Base implements A, B { int value = 40; public String process() { return A.super.process() + "-" + super.value; } } public class Main { public static void main(String[] args) { A obj = new Child(); System.out.println(obj.value + " " + obj.process()); } }
정답
10 A-10-30
10 A-10-3010A-10-30
해설
- obj.value: A 인터페이스 타입으로 선언되어 인터페이스 상수 10을 정적 바인딩으로 참조
- obj.process(): Child 클래스의 오버라이딩된 메서드가 동적 바인딩됨
- A.super.process(): 인터페이스 A의 default 메서드 호출로 "A-10" 반환 (A.value = 10)
- super.value: Base 클래스의 필드 30 참조
- 최종 결과: "A-10" + "-" + "30" = "A-10-30"