本日はプログラム構造に関する問題を解きましょう。
問題
次のプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。
class Vehicle {
String type = "Vehicle";
void displayType() {
System.out.println("Type: " + type);
}
}
class Car extends Vehicle {
String type = "Car";
@Override
void displayType() {
System.out.println("Type: " + type);
}
}
public class Main {
public static void main(String[] args) {
Vehicle myVehicle = new Car();
myVehicle.displayType();
}
}
選択肢
- A. Type: Vehicle
- B. Type: Car
- C. コンパイルエラー
- D. 実行時エラー
答えと解説
回答を見る
答え
B. Type: Car
解説
解説のポイント:
- メソッドのオーバーライド
- フィールドのシャドウイング
Javaでは、サブクラスがスーパークラスのメソッドをoverride
(上書き)することができます。これは、親クラスの機能を拡張したり、特定の動作を持たせるために使われます。
このプログラムでは、Vehicle
クラスのdisplayType
メソッドが、Car
クラスによってオーバーライドされています。このため、Car
クラスのインスタンスから呼び出された場合、そのオーバーライドされたメソッドが実行されます。
一方、フィールドについてはメソッドとは異なり、「シャドウイング」という概念が適用されます。シャドウイングとは、サブクラスのフィールドが同じ名前のスーパークラスのフィールドを隠してしまうことです。しかし、ここではmyVehicle.displayType()
とCar
クラスのdisplayType
メソッドが実行されるため、フィールドtype
はCar
クラスのものになります。
したがって、プログラムを実行すると、「Type: Car」と出力されます。