Java 速習チュートリアル

Java の継承(Inheritance)

1. Javaの継承(サブクラスとスーパークラス)

Javaでは、あるクラスから別のアトリビュートやメソッドを継承することが可能です。「継承」という概念は、大きく以下の2つのカテゴリに分けられます。

  • サブクラス(子) - 他のクラスから継承を受ける側のクラス
  • スーパークラス(親) - 継承される側のクラス

クラスを継承するには、extends キーワードを使用します。

以下の例では、Car クラス(サブクラス)が Vehicle クラス(スーパークラス)からアトリビュートとメソッドを継承しています。

例:

class Vehicle {
  protected String brand = "Ford";        // Vehicleのアトリビュート
  public void honk() {                    // Vehicleのメソッド
    System.out.println("Tuut, tuut!");
  }
}

class Car extends Vehicle {
  private String modelName = "Mustang";    // Carのアトリビュート
  public static void main(String[] args) {

    // myCarオブジェクトを作成
    Car myCar = new Car();

    // Vehicleクラスにあるhonk()メソッドをmyCarオブジェクトから呼び出す
    myCar.honk();

    // Vehicleクラスのアトリビュート(brand)とCarクラスのアトリビュート(modelName)の値を表示する
    System.out.println(myCar.brand + " " + myCar.modelName);
  }
}

1.1 protected修飾子の役割

Vehicle クラス内の brand アトリビュートに protected 修飾子が使われていることにお気づきでしょうか?

Vehiclebrand アトリビュートを protected アクセス修飾子に設定したことで、継承関係にある Car クラスからのアクセスを許可しています。もしこれが private に設定されていた場合、Car クラスからはアクセスできなくなります。

2. なぜ、いつ「継承」を使用するのか?

  • コードの再利用性: 新しいクラスを作成する際、既存のクラスにあるアトリビュートやメソッドを再利用できます。

ヒント: 次のチャプターで紹介する「ポリモーフィズム(多態性)」も併せて確認してください。継承したメソッドを使用して、異なるタスクを実行させる高度なテクニックを学びます。

3. finalキーワード

他のクラスに継承させたくない場合は、クラスに対して final キーワードを使用します。

もし final 指定されたクラスを継承しようとすると、Javaはコンパイルエラーを生成します。

final class Vehicle {
  ...
}

class Car extends Vehicle {
  ...
}

この場合の出力(エラー内容)は以下のようになります。

Main.java:9: error: cannot inherit from final Vehicle
class Main extends Vehicle {
                   ^
1 error