【けいしょう】

継承 とは?

💡 親クラスの「財産を受け継ぐ」子クラスの仕組み
📌 このページのポイント
Vehicle(乗り物) color: 色 speed: 速度 move() 移動する ▼ 継承 Car(車) color, speed ← 継承 move() ← 継承 doors: ドア数 drive() 運転する Bike(自転車) color, speed ← 継承 move() ← 継承 — (追加プロパティなし) pedal() こぐ
クラスの継承
ひよこ ひよこ

継承って何のためにあるの?

ペンギン先生 ペンギン先生

コードの重複を減らすためだよ。「動物」クラスに「名前」と「鳴く」メソッドを作っておけば、「犬」クラスや「猫」クラスはそれを引き継いで、独自の部分だけを追加すればいい。

ひよこ ひよこ

オーバーライドって何?

ペンギン先生 ペンギン先生

親クラスのメソッドを子クラスで上書きすること。「動物」の「鳴く」メソッドを「犬」では「ワン!」に、「猫」では「ニャー!」に書き換える。継承した機能をカスタマイズする手段だよ。

ひよこ ひよこ

多重継承ができない言語がある理由は?

ペンギン先生 ペンギン先生

「ダイヤモンド問題」があるからだよ。AとBを継承したCで、AとBが同じメソッドを持っているとき、Cはどちらのメソッドを使えばいいか分からなくなる。それを避けるためにJavaC#は単一継承だけ許可して、インターフェースで補う設計にしている。

ひよこ ひよこ

「継承より合成」って何?

ペンギン先生 ペンギン先生

継承で機能を「引き継ぐ」より、必要な機能を持つオブジェクトを「フィールドに持つ(合成)」ほうが柔軟という考え方。継承は親子関係が固定されて変更しにくくなるけど、合成なら部品を差し替えやすい。Goのように継承を持たず合成のみの言語もある。継承と合成の使い分けは設計力の問われるところで、「is-a関係」なら継承、「has-a関係」なら合成、というガイドラインが判断の基準になる。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
継承って出てきたら「親クラスの機能を引き継ぐ」と思えばだいたいOK!
📖 おまけ:英語の意味
「Inheritance」 = 相続・継承
💬 法律用語の「相続(親から財産を引き継ぐ)」と同じ言葉。クラスが親の「財産(コード)」を引き継ぐ
← 用語集にもどる