継承とオーバーライド

クラスの継承(extendsを使って、親クラス(基底クラス)の機能を再利用しながら、サブクラスで独自の振る舞い(オーバーライド)を定義できます。


✅ 継承(Inheritance)とは?

親クラス(基底クラス)のプロパティやメソッドを子クラスに引き継ぐ機能です。

class Animal {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  speak() {
    console.log(`${this.name} makes a sound.`);
  }
}

class Dog extends Animal {
  bark() {
    console.log(`${this.name} says: ワン!`);
  }
}

const dog = new Dog("ポチ");
dog.speak(); // ポチ makes a sound.
dog.bark();  // ポチ says: ワン!
  • Dog クラスは Animalextends しているため、speak() を継承して使用可能
  • Dog クラスは独自の bark() も使用できる

🔁 オーバーライド(Override)とは?

親クラスで定義されたメソッドを、子クラスで上書きして独自の処理に変更することです。

class Cat extends Animal {
  // オーバーライド
  speak() {
    console.log(`${this.name} says: ニャー!`);
  }
}

const cat = new Cat("ミケ");
cat.speak(); // ミケ says: ニャー!
  • 同じ speak() というメソッド名でも、親とは異なる処理に置き換えられる

📝 オーバーライド時の型安全性(オプション)

TypeScript 4.3 以降では override 修飾子が利用可能です:

class Bird extends Animal {
  override speak() {
    console.log(`${this.name} chirps.`);
  }
}
  • override を付けると、親に同名メソッドがない場合はエラーになるため、継承構造の安全性が高まります。

⚠️ 注意:コンストラクタの継承と super

親クラスにコンストラクタがある場合、子クラスのコンストラクタで super() を呼び出す必要があります。

class Animal {
  constructor(public name: string) {}
}

class Lion extends Animal {
  constructor(name: string, public color: string) {
    super(name); // ✅ 親のconstructorを呼び出す
  }
}

✅ まとめ:継承とオーバーライドのポイント

機能 説明
extends 親クラスからプロパティ・メソッドを引き継ぐ
メソッド定義 同名メソッドを定義するとオーバーライドになる
override 明示的なオーバーライドチェックを強制できる(TS 4.3+)
super() コンストラクタ内で親クラスの初期化処理を呼び出す必要がある

📚 継承が向いているケース

  • 共通のプロパティや振る舞いを複数のクラスで共有したいとき
  • 部品を差し替えたいが、ベースのロジックは共通にしたいとき(テンプレートメソッドパターンなど)
  • ポリモーフィズムを使いたいとき(Animal[]Dog, Cat を混在させるなど)

継承とオーバーライドを活用することで、コードの再利用性が高まり、ロジックを役割ごとに分離した柔軟な設計が可能になります。

コメントを残す 0

Your email address will not be published. Required fields are marked *