문제 16번. 출력결과
class classOne {
int a, b;
public classOne(int a, int b) {
this.a = a;
this.b = b;
}
public void print() {
System.out.println(a + b);
}
}
class classTwo extends classOne {
int po = 3;
public classTwo(int i) {
super(i, i+1);
}
public void print() {
System.out.println(po*po);
}
}
public class main {
public static void main(String[] args) {
classOne one = new classTwo(10);
one.print();
}
}
더보기
더보기
[ 답 ]
9
[ 풀이 ]
이 문제는 상속, 생성자 호출, 그리고 메서드 오버라이딩에 대한 개념을 다루고 있다.
main에서 classTwo 객체를 생성하면서 classOne 타입으로 업캐스팅을 한다.
이 경우, 실제 객체는 classTwo 이기 때문에 메서드를 실행할 때 classTwo를 참조하여 classTwo에 있는 print()를 실행한다.
따라서 출력값은 po*po = 3*3 = 9 가 된다.
요약
super() | 부모 클래스 생성자 호출 |
업캐스팅 | classTwo 객체를 classOne 타입 변수로 참조 |
오버라이딩 | 부모의 print()를 자식이 재정의했기 때문에 자식 버전 호출 |
실제 실행 메서드 | 항상 실제 객체 타입 기준으로 호출됨 (동적 바인딩) |