26-1다음 Java 코드를 수행했을 때 콘솔에 나타나는 값을 적으시오… | 2026년 정보처리기사실기 1회차 기출문제 상세 페이지
9
26-1
다음 Java 코드를 수행했을 때 콘솔에 나타나는 값을 적으시오.
class Printer {
String show(Object v) {
return "P";
}
String run() {
return show(7) + show("x");
}
}
class Laser extends Printer {
String show(Object v) {
return "L";
}
String show(Integer v) {
return "I";
}
String show(String v) {
return "S";
}
}
public class Main {
public static void main(String[] args) {
Printer p = new Laser();
System.out.println(p.run() + ((Laser) p).show("k"));
}
}해설
LLS
[해설]
어떤 메서드를 부를지(오버로딩 선택)는 컴파일 시점에 참조 타입으로 정하고, 실제 실행은 객체 타입의 오버라이딩 메서드로 결정된다.
- run()은 Printer 클래스 안에 있으므로 컴파일러는 Printer의 show(Object)만 본다. show(7)과 show("x") 모두 show(Object)로 확정된다.
- 실행 객체는 Laser이므로 오버라이딩된 Laser.show(Object)가 두 번 실행되어 "LL"이 된다.
- ((Laser) p).show("k")는 참조 타입이 Laser라 가장 구체적인 show(String)이 골라져 "S"가 된다.
최종 출력은 LLS이다. 자식에만 있는 show(Integer)·show(String)은 부모 타입 안에서는 후보조차 되지 않는다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.