다음 Java 코드를 실행했을 때의 출력값을 쓰시오.
class Root {
String choose(Object value) { return "1"; }
String execute() { return choose("data"); }
}
class Leaf extends Root {
@Override String choose(Object value) { return "2"; }
String choose(String value) { return "3"; }
}
public class Main {
public static void main(String[] args) {
Root ref = new Leaf();
System.out.print(ref.execute());
}
}모범답안
2
풀이와 판단 근거
Root.execute() 안의 choose 호출은 Root 클래스에서 작성되었으므로 컴파일 시점의 오버로딩 후보는 Root.choose(Object)로 확정된다.
실제 실행 객체는 Leaf이기 때문에 런타임에는 그 메서드를 재정의한 Leaf.choose(Object)가 동적 디스패치되어 문자열 2를 반환한다. Leaf에만 있는 choose(String)은 오버로딩 후보 선택이 끝난 뒤에는 새로 선택되지 않으므로 출력은 3이 아니다.
자주 틀리는 지점
- 문자열 인자만 보고 Leaf.choose(String)을 선택해 3으로 답함
- 참조형 Root만 보고 1로 답함
- 오버로딩과 오버라이딩이 모두 런타임에 결정된다고 판단
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.