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 修飾子が使われていることにお気づきでしょうか?
Vehicle の brand アトリビュートを 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