문제
다음 Java 코드의 실행 결과를 쓰시오.
Javaabstract class Vehicle { String name = "Vehicle"; abstract int speed(); String getName() { return name; } } class Bike extends Vehicle { String name = "Bike"; int velocity; Bike(int v) { this.velocity = v; } int speed() { return velocity * 2; } String getName() { return name; } } public class Main { public static void main(String[] args) { Vehicle v = new Bike(15); System.out.println(v.name + " " + v.getName() + " " + v.speed()); } }
정답
Vehicle Bike 30
Vehicle Bike 30VehicleBike30
해설
필드 name은 정적 바인딩으로 선언 타입인 Vehicle의 필드 값 'Vehicle'을 참조합니다. 메서드 getName()과 speed()는 동적 바인딩으로 실제 객체인 Bike 클래스의 오버라이딩된 메서드가 호출됩니다. getName()은 Bike의 name 필드 'Bike'를 반환하고, speed()는 velocity * 2 = 15 * 2 = 30을 반환합니다.