문제
다음 Java 코드의 실행 결과를 쓰시오.
Javaclass A { int x = 10; int getX() { return x; } } class B extends A { int x = 20; int getX() { return x; } } public class Main { public static void main(String[] args) { A a = new B(); System.out.println(a.x + " " + a.getX()); } }
정답
10 20
1020
해설
Java에서 필드는 참조 변수의 선언 타입(A)을 기준으로 정적 바인딩되므로 a.x는 A의 x인 10이다. 메서드는 실제 객체(B)를 기준으로 동적 디스패치되므로 a.getX()는 B의 getX()가 호출되어 20을 반환한다.