MENU

【Java Silver 試験】抽象クラスとインターフェースの違いを理解する

今回のテーマに沿って、Javaの抽象クラスについて理解を深める問題を解いていきましょう。

問題

次のプログラムは正しくコンパイルされています。実行した場合に出力される結果を選んでください。

abstract class Vehicle {
    abstract void startEngine();

    void stopEngine() {
        System.out.println("Engine stopped");
    }
}

class Car extends Vehicle {
    @Override
    void startEngine() {
        System.out.println("Car engine started");
    }
}

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

選択肢

  • A. Car engine started Engine stopped
  • B. Engine stopped Car engine started
  • C. コンパイルエラー
  • D. 実行時エラー

答えと解説

回答を見る

答え

A. Car engine started Engine stopped

解説

解説のポイント:

  • 抽象クラスとは
  • オーバーライドの理解
  • インスタンス化の流れ

抽象クラスは、少なくとも1つの抽象メソッドを含むクラスであり、オブジェクトとして直接インスタンス化することは出来ません。しかし、抽象メソッドを持つことで、継承先で具体的な実装を提供させることを強制できます。

このコードでは、VehicleクラスはstartEngineという抽象メソッドを持ち、stopEngineという通常のメソッドがあります。CarクラスがVehicleを継承し、startEngineをオーバーライドすることで、具体的な処理を提供しています。

メソッドの呼び出しについてはインスタンスの実際のクラスによるものであり、Vehicle型の変数myVehicleを通じてCarクラスのメソッドが実行されます。このため、myVehicle.startEngine()Carの実装を実行し、「Car engine started」が出力されます。その後stopEngineVehicleのメソッドが呼び出され「Engine stopped」が続きます。

目次