Java Silver試験対策として、サブクラスとスーパークラスの理解を深める問題を見ていきましょう。
問題
次のコードを実行した場合に表示される出力は何でしょうか?正しい選択肢を1つ選んでください。
class Vehicle {
void start() {
System.out.println("Vehicle is starting");
}
}
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
解説
基本説明
この問題は、Javaにおけるサブクラスとスーパークラスの関係を検証するものです。
具体的には、オーバーライド(上書き)とポリモーフィズム(多態性)の理解を試されます。
オブジェクト指向プログラミングの言語であるJavaでは、一つのオブジェクトを異なる型で扱うことができ、この動作は多態性(ポリモーフィズム)によって実現されています。
- 誤答理由: オーバーライドされたメソッドが呼び出される理由を見落としがち。
- 共通認識の間違い: ベースクラスのメソッドが必ずしもそのまま実行されるわけではない点を誤解する。
プログラム中のVehicle myVehicle = new Car();
というコード行で、myVehicle
という変数はVehicle
型ですが、実際に保持されているオブジェクトはCar
型です。
このmyVehicle.start()
というメソッド呼び出しにおいて、ポリモーフィズムによりCar
クラスのstart
メソッドがオーバーライドされているので、Car is starting
が出力されます。
つまずきポイント
つまずきやすいポイントとしては、「オーバーライド」と「多態性」の正確な理解があります。
しばしば、ベース(スーパークラス)のメソッドが優先されると誤解されるため、学習時に注意が必要です。
発展知識
発展的な話としては、Javaにはinterfaceという別の技術があります。
インターフェースでは、複数の型をまたがるポリモーフィズムを実現するために、様々なクラスが共通してメソッドを実装することを強制します。
これにより、クラス間の依存を減らし、より柔軟かつ拡張可能なプログラムを作成できるようになります。