今回はクラス継承に関連する問題を解いてみましょう。
問題
次のプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。
class Vehicle {
void startEngine() {
System.out.println("General engine start");
}
}
class Car extends Vehicle {
@Override
void startEngine() {
System.out.println("Car engine start");
}
}
public class Main {
public static void main(String[] args) {
Vehicle myVehicle = new Car();
myVehicle.startEngine();
}
}
選択肢
- A. General engine start
- B. Car engine start
- C. コンパイルエラー
- D. 実行時エラー
答えと解説
回答を見る
答え
B. Car engine start
解説
解説のポイント:
- クラスの継承とメソッドのオーバーライド
- ポリモーフィズム
基本説明:
Javaでは、サブクラスがスーパークラスからメソッドを引き継ぐことができます。これを継承と呼びます。
この際、サブクラスがスーパークラスのメソッドを再定義することをオーバーライドと呼びます。
誤答理由:
選択肢Aの「General engine start」を選んでしまう方は、スーパークラスのメソッドが呼ばれると考えてしまいます。
しかし、実際にはポリモーフィズムによりサブクラスのメソッドが呼び出されます。
つまずきポイント:
多態性の理解が浅いと、変数の型に依存してメソッドが決定されると勘違いしがちです。
実際には、実際のオブジェクトのクラスに応じたメソッドが実行されます。
発展知識:
この問題はポリモーフィズムの基本を理解するためのものですが、Javaの継承やメソッドオーバーライドについてさらに深く知ることができます。
たとえば、オーバーライドメソッドではアクセス修飾子を広げることが可能など、細かいルールが存在します。