다음 Java 프로그램에서 인수 개수에 따른 메서드 선택과 오버라이딩된 메서드의 동적 호출을 적용하여 출력 결과를 쓰시오.
class Formatter {
String tag = "B";
String render() {
return render(tag);
}
String render(String value) {
return "F" + value;
}
}
class JsonFormatter extends Formatter {
String tag = "J";
@Override
String render(String value) {
return value + super.tag;
}
String render(int value) {
return "N" + value;
}
}
public class Main {
public static void main(String[] args) {
Formatter item = new JsonFormatter();
System.out.print(item.render() + "|" + item.render("X"));
}
}모범답안
BB|XB
풀이와 판단 근거
item.render()는 인수 없는 Formatter.render를 실행한다.
그 안의 tag는 Formatter에 선언된 필드 B로 해석되지만 `render(String)` 호출은 실제 객체의 오버라이딩 메서드로 동적 바인딩되어 B와 super.tag의 B를 합친 BB를 반환한다.
item.render("X")도 JsonFormatter의 String 메서드가 실행되어 XB가 된다. int 오버로드는 호출되지 않는다.
자주 틀리는 지점
- 필드도 메서드처럼 동적 바인딩되어 첫 결과가 JJ라고 봄
- 참조 타입이 Formatter라 오버라이딩 메서드가 호출되지 않는다고 판단함
- String 인수 호출을 int 오버로드와 혼동함
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.