Javaの抽象クラスのコンストラクタについての解説と使用例


抽象クラスのコンストラクタは、派生クラスがインスタンス化される際に実行される初期化処理を含みます。抽象クラスのコンストラクタの実装方法は、通常のクラスのコンストラクタと同様です。ただし、抽象クラス自体は直接インスタンス化できないため、そのコンストラクタは派生クラスからのみ呼び出されます。

以下に、抽象クラスのコンストラクタの使用例をいくつか示します。

abstract class Vehicle {
  private String brand;
  public Vehicle(String brand) {
    this.brand = brand;
  }
  public abstract void start();
}
class Car extends Vehicle {
  private int numOfDoors;
  public Car(String brand, int numOfDoors) {
    super(brand);
    this.numOfDoors = numOfDoors;
  }
  public void start() {
    System.out.println("The car is starting.");
  }
}
public class Main {
  public static void main(String[] args) {
    Car car = new Car("Toyota", 4);
    car.start();
  }
}

上記の例では、Vehicleという抽象クラスがあります。このクラスはbrandというプライベートなメンバ変数を持ち、コンストラクタで初期化されます。また、startという抽象メソッドも定義されています。

CarVehicleを継承した具象クラスであり、追加のメンバ変数numOfDoorsを持ちます。Carのコンストラクタでは、super(brand)を呼び出してVehicleのコンストラクタを実行し、numOfDoorsも初期化されます。さらに、startメソッドもオーバーライドされています。

Mainクラスでは、Carクラスのインスタンスを生成し、そのstartメソッドを呼び出しています。実行結果として、"The car is starting."という出力が表示されます。

このように、抽象クラスのコンストラクタは派生クラスのインスタンス化時に使用され、初期化処理を行うための重要な役割を果たします。派生クラスで特定の初期化処理が必要な場合には、抽象クラスのコンストラクタを適切に実装することが重要です。