Java Silver試験のために、サブクラスとスーパークラスの関係を理解しましょう。
問題
次のプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。
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では、ポリモーフィズムにより、スーパークラスの型でサブクラスのインスタンスを保持することができます。
このコードでは、Vehicle
型の変数myVehicle
がCar
オブジェクトを保持しています。そのため、start
メソッドを呼び出すと、スーパークラスのメソッドではなくサブクラスのオーバーライドされたメソッドが実行され、「Car is starting」と表示されます。
基本説明
ポリモーフィズムは、異なるクラスのオブジェクトに対して同じインターフェースを提供することで、より柔軟でモジュール化されたコードを書くためのオブジェクト指向プログラミングの特性です。
主なポイントは、スーパークラスの参照型を使ってサブクラスのオブジェクトを操作できることです。
誤答理由
選択肢Aの「Vehicle is starting」が誤答である理由は、サブクラスのCar
がstart
メソッドをオーバーライドしているためです。選択肢CとDのエラーは発生しません。
つまずきポイント
ポリモーフィズムの考え方に慣れていないと、スーパークラス型の参照がサブクラスのオブジェクトを保持することを見落とすかもしれません。
オーバーライドされたメソッドが呼ばれる際の動作を理解することが大切です。
発展知識
Javaのポリモーフィズムは、開発者がコードの柔軟性と再利用性を高めるための強力な手法です。
抽象クラスやインターフェースを用いることで、さらに高度な設計を行うことができます。
特にインターフェースを使用すると、異なるクラスが共通のメソッド群を持つことになり、より直交性の高い設計を実現できます。