MENU

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

今日も一緒に問題を解いて、Java Silver試験への理解を深めましょう。

問題

以下のコードを実行した場合の結果を選択してください。

class Vehicle {
        void move() {
            System.out.println("Vehicle is moving");
        }
    }

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

    public class Main {
        public static void main(String[] args) {
            Vehicle vehicle = new Car();
            Car car = (Car) vehicle;
            car.move();
        }
    }

選択肢

  • A. Vehicle is moving
  • B. Car is accelerating
  • C. コンパイルエラー
  • D. 実行時エラー

答えと解説

回答を見る

答え

B. Car is accelerating

解説

解説のポイント:

  • オーバーライドの仕組み
  • キャストの理解
  • ポリモーフィズム

Javaのオーバーライドとは、サブクラスがスーパークラスのメソッドを再定義することです。

ポリモーフィズムにおいて、オブジェクトがスーパークラス型の場合でも、サブクラスのオーバーライドされたメソッドが実行されます。

この問題では、Vehicle型の変数vehicleCarオブジェクトを指しており、Carクラスのmoveメソッドがオーバーライドされています。

さらに、キャストによってvehicleCar型のcarとして参照されます。

このため、car.move()が呼び出されると、Carクラスのmoveメソッドが実行され、「Car is accelerating」と出力されます。

発展知識

ポリモーフィズムとキャストを応用すると、他のサブクラスが増えてもスーパークラスを通じて同様の処理が行えるため、コードの柔軟性が上がります。

キャストは必ず成功するとは限らず、安全性を確保するためにインスタンスが実際にどのクラスに属しているかを確認するinstanceof演算子の使用も検討されます。

この演算子は、オブジェクトが指定されたクラスまたはそのサブクラスのインスタンスであるかどうかを確認します。

目次