모두CBT

24-3아래 Java 프로그램의 출력 결과를 적으시오.class Sho… | 2024년 정보처리기사실기 3회차 기출문제 상세 페이지

17

24-3

아래 Java 프로그램의 출력 결과를 적으시오.

class Show {
    void out(Long v) {
        System.out.print("L" + v);
    }
    void out(Number v) {
        System.out.print("N" + v);
    }
    void out(Object v) {
        System.out.print("O" + v);
    }
}

class Holder<E> {
    E item;
    Holder(E item) {
        this.item = item;
    }
    void display() {
        new Show().out(item);
    }
}

public class Main {
    public static void main(String[] args) {
        Holder<Long> h = new Holder<>(7L);
        h.display();
        new Show().out(h.item);
    }
}
해설

O7L7


[해설]

오버로딩된 메서드 중 무엇을 부를지는 실행 시점이 아니라 컴파일 시점의 인자 타입으로 정해진다.

Holder 클래스 안에서 컴파일러가 아는 item의 타입은 상한(bound)이 Object인 타입 변수 E뿐이라, Holder<Long>으로 만들어도 display()는 out(Object)를 호출해 "O7"을 찍는다.

main의 h.item은 Holder<Long>에서 꺼낸 값이라 컴파일러가 Long으로 알고 있다. 따라서 가장 구체적인 out(Long)이 호출되어 "L7"이 찍힌다.

합쳐서 O7L7이 출력된다.

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