정보처리기사 실기JavaJava - 추상클래스 동적 디스패치난이도 2SHORT_ANSWER

정보처리기사 실기 Java - 추상클래스 동적 디스패치 기출문제 #484

문제

다음 Java 코드의 실행 결과를 쓰시오.

Java
abstract class Vehicle { String name = "Vehicle"; abstract void move(); String getName() { return name; } } class Car extends Vehicle { String name = "Car"; void move() { System.out.print("drive "); } String getName() { return name; } } class Truck extends Car { String name = "Truck"; void move() { System.out.print("haul "); } } public class Main { public static void main(String[] args) { Vehicle v = new Truck(); v.move(); System.out.println(v.name + " " + v.getName()); } }

정답

haul Vehicle Car

haul Vehicle Car

해설

Vehicle v = new Truck()로 선언했을 때, v.move()는 동적 바인딩으로 실제 객체인 Truck의 move() 메서드가 호출되어 'haul '을 출력한다. v.name은 필드이므로 정적 바인딩되어 선언 타입인 Vehicle의 name 필드 값 'Vehicle'을 참조한다. v.getName()은 동적 바인딩으로 Truck의 메서드를 찾는데, Truck은 getName()을 오버라이드하지 않았으므로 상위 클래스인 Car의 getName()이 호출된다. Java에서 필드는 오버라이딩이 아닌 은닉(hiding)이므로, Car.getName() 메서드 내의 name은 Car 클래스에 선언된 name 필드 'Car'를 참조한다. 따라서 출력 결과는 haul Vehicle Car이다.

이런 문제 20~50개를 한 번에 풀어보세요

매번 새로 추가되는 모의고사 + 오답 자동 복습 + 회차별 실력 추적. 회원가입 후 무료 이용.