다음은 Java로 작성된 프로그램이다.
class Mammal {
void mamma() {
System.out.println("mamma");
}
}
class Human extends Mammal {
void speak() {
System.out.println("speak");
}
}
class ReferenceCast {
public static void main(String args[]) {
Mammal mammal;
Human human;
mammal = new Mammal();
human = new Human();
㉠
}
} 주어진 프로그램의 ㉠ 부분에 다음 <보기 1> 또는 <보기 2> 문장이 들어가는 경우에 대한 설명으로 옳은 것은?
<보기 1> | ||
human = (Human)mammal;
human.mamma(); | ||
<보기 2> | ||
mammal = human;
mammal.speak(); | ||
- ①㉠에 <보기 1>의 문장이 삽입될 경우, human은 Mammal 클래스의 객체를 참조하게 되므로 human.mamma(); 부분에서 문자열 “mamma”를 출력한다.
- ②㉠에 <보기 1>의 문장이 삽입될 경우, human = (Human)mammal; 부분에서 컴파일 오류는 발생하지 않지만, 실행시 예외(exception)가 발생한다.
- ③㉠에 <보기 2>의 문장이 삽입될 경우, mammal은 Human 클래스의 객체를 참조하게 되므로 mammal.speak(); 부분에서 문자열 “speak”를 출력한다.
- ④㉠에 <보기 2>의 문장이 삽입될 경우, Human 클래스와 Mammal 클래스는 클래스형(class type)이 서로 다르기 때문에 mammal = human; 부분에서 컴파일 오류가 발생한다.
선지를 골라 바로 채점해 보세요.
정답 ②
출처: 인사혁신처 공개 기출(공공데이터포털, 이용허락 제한 없음)