모두CBT

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)은 부모 타입 안에서는 후보조차 되지 않는다.

내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.