MENU

【Java Silver】参照型のキャストとポリモーフィックなメソッド呼び出し

今回もJavaのポリモーフィズムの理解を深める問題に挑戦しましょう。

問題

以下のプログラムを実行した場合の出力はどうなるでしょうか?正しい選択肢を選んでください。

class Vehicle {
                void start() {
                    System.out.println("Vehicle is starting");
                }
            }

            class Car extends Vehicle {
                @Override
                void start() {
                    System.out.println("Car is starting");
                }
            }

            class Bike extends Vehicle {
                @Override
                void start() {
                    System.out.println("Bike is starting");
                }
            }

            public class Main {
                public static void main(String[] args) {
                    Vehicle myVehicle = new Car();
                    myVehicle.start();

                    myVehicle = new Bike();
                    myVehicle.start();
                }
            }

選択肢

  • A. Vehicle is starting
  • B. Car is starting
  • C. Car is starting
    Bike is starting
  • D. Bike is starting
  • E. コンパイルエラー
  • F. 実行時エラー

答えと解説

回答を見る

答え

C. Car is starting
Bike is starting

解説

解説のポイント:

  • オーバーライドの概念
  • 参照型のキャストとインスタンスの関係
  • 実行時のメソッド選択

Javaのポリモーフィズムは、スーパークラスの参照を持ちつつ、サブクラスのメソッドを動的に呼び出す機能です。

プログラム内でVehicle型の変数myVehicleは、まずCarオブジェクトを参照しているため、startメソッドを呼び出すとCarクラスのstartメソッドが実行され、「Car is starting」と出力されます。

次に、myVehicleBikeオブジェクトを参照するようassignされます。

このため、同じstartメソッドの呼び出しであっても、今度はBikeクラスのstartが実行され、「Bike is starting」と表示されます。

このように、実際にnewで生成されたオブジェクトがどのクラスに属しているかによって実行されるメソッドが決定されます。

目次