다음 Java 프로그램을 실행했을 때 출력되는 값을 쓰시오.
class Parent {
int value = 2;
int calculate() {
return value + 1;
}
}
class Child extends Parent {
int value = 5;
@Override
int calculate() {
return super.calculate() + value;
}
}
public class Main {
public static void main(String[] args) {
Parent ref = new Child();
System.out.print(ref.value + ":" + ref.calculate());
}
}모범답안
2:8
풀이와 판단 근거
인스턴스 필드는 메서드처럼 동적 바인딩되지 않으므로 Parent 타입으로 선언된 ref에서 ref.value를 읽으면 Parent의 2가 사용된다. calculate()는 오버라이딩된 Child의 메서드가 실행된다.
super.calculate()는 Parent.value 2에 1을 더한 3을 반환하고, 여기에 Child.value 5를 더해 8이 된다. 최종 출력은 2:8이다.
자주 틀리는 지점
- 필드도 오버라이딩된다고 생각해 5를 사용
- super.calculate()가 Child.value를 사용한다고 판단
- 참조 타입과 실제 객체 타입의 역할을 반대로 이해
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.