JavaScript | classの継承(extends)

JavaScript JavaScript
スポンサーリンク

それでは「継承を使うときの注意点」と「コンポジションとの使い分け」について整理してみましょう。ここを理解すると、オブジェクト指向を“賢く”使えるようになります。


⚠️ 継承を使うときの注意点

  • 1. 継承の多用は危険
    • 子クラスが親クラスに強く依存するため、親を変更すると子も影響を受けやすい
    • 「親子関係が複雑になりすぎる」とコードが読みにくくなる
  • 2. 「is-a」関係のときだけ使う
    • 継承は「AはBの一種である(is-a)」が成り立つときに使う
    • 例:犬(Dog)は動物(Animal)の一種 → 継承OK
    • 例:車(Car)はエンジン(Engine)の一種ではない → 継承NG
  • 3. オーバーライドの乱用に注意
    • 子クラスで親のメソッドを上書きしすぎると、親の設計を壊してしまう
    • 「親のメソッドをそのまま使える」ことが継承の強みなので、上書きは必要最小限に

🔄 コンポジションとの使い分け

コンポジション(合成)とは「部品を組み合わせて機能を作る」考え方です。
👉 「has-a(〜を持っている)」関係のときに使うのが基本。

例:車とエンジン

// エンジンは独立したクラス
class Engine {
  start(){
    console.log("エンジン始動!");
  }
}

// 車は「エンジンを持っている」
class Car {
  constructor(){
    this.engine = new Engine();
  }

  drive(){
    this.engine.start();
    console.log("車が走り出した!");
  }
}

let car = new Car();
car.drive();
// → エンジン始動!
// → 車が走り出した!
JavaScript
  • 車は「エンジンの一種」ではないので継承は不適切
  • 「エンジンを持っている」のでコンポジションが正解

✅ まとめ

  • 継承は「is-a」関係(犬は動物の一種)で使う
  • コンポジションは「has-a」関係(車はエンジンを持っている)で使う
  • 継承を多用すると依存関係が複雑になりやすいので、まずはコンポジションを検討するのが安全

💡 初心者へのアドバイス:

  • 「これは本当にis-a関係か?」と自問してから継承を使う
  • 迷ったらまずはコンポジションで組み立てる方が柔軟
タイトルとURLをコピーしました