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이 출력된다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.