MENU

【Java Silver 試験】クラス継承とメソッドオーバーライドの理解

今回はクラス継承に関連する問題を解いてみましょう。

問題

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

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の継承やメソッドオーバーライドについてさらに深く知ることができます。

たとえば、オーバーライドメソッドではアクセス修飾子を広げることが可能など、細かいルールが存在します。

目次