本日は抽象クラスに関する問題に挑戦しましょう。
問題
抽象クラスを使った次のJavaプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。
abstract class Vehicle {
abstract void start();
}
class Car extends Vehicle {
@Override
void start() {
System.out.println("Car is starting");
}
}
public class Main {
public static void main(String[] args) {
Vehicle myVehicle = new Car();
myVehicle.start();
}
}
選択肢
- A. Vehicle is starting
- B. Car is starting
- C. コンパイルエラー
- D. 実行時エラー
答えと解説
回答を見る
答え
B. Car is starting
解説
解説のポイント:
- 抽象クラスとその目的
- メソッドのオーバーライド
- 実装クラスの役割
今回のプログラムでは、Vehicle
という抽象クラスがあります。このクラスはメソッドstart()
の具体的な動作を定義していません。
抽象クラスは「設計図」の役割を果たし、必ずしも具体的な動作を持つ必要はありません。代わりに、サブクラスで具体的な実装を持たせます。
たとえば、Car
クラスはVehicle
クラスを継承し、start()
メソッドをオーバーライドしています。
プログラム内でVehicle
型のmyVehicle
はCar
オブジェクトを参照しています。この参照を通じてstart()
メソッドを呼び出すとCar
クラス側のオーバーライドされたstart()
メソッドが実行されます。
そのため、「Car is starting」が出力されるという結果になっています。