【けいしょう】

継承 とは?

最終更新:
💡 親クラスの「財産を受け継ぐ」子クラスの仕組み

既存のクラスの性質や機能を引き継ぎ、新しいクラスを作る仕組み。共通の処理を再利用し、子クラスで機能を追加したり動作を変えたりできる。

📌 このページのポイント
共通の機能を引き継ぐ Vehicle(乗り物) color:色 move():移動する 継承 Car(車) Bike(自転車) drive() を追加 pedal() を追加 引き継げる範囲は言語・宣言による
矢印は親の機能を子へ引き継ぐイメージ。UMLの継承矢印とは異なる。
ひよこ ひよこ
継承って何のためにあるの?
ペンギン先生 ペンギン先生
共通の機能を再利用して、種類ごとの違いを表すためだよ。例えば「動物」に共通の機能を用意し、「犬」や「猫」をその子クラスにすると、共通部分を毎回書かずに済むんだ。
ひよこ ひよこ
オーバーライドすると、親のコードを書き換えるの?
ペンギン先生 ペンギン先生
親のコードは変えないよ。例えば「鳴く」というメソッドに、犬では「ワン!」、猫では「ニャー!」という子クラス独自の実装を定義するんだ。
ひよこ ひよこ
複数の親から継承することもできる?
ペンギン先生 ペンギン先生
言語によるよ。Javaのクラスは直接の親クラスを1つだけ持ち、複数のインターフェースは実装できる。複数の実装を引き継ぐ設計では、同じメソッドが競合したときのルールも必要なんだ。
ひよこ ひよこ
ダイヤモンド問題ってどんな形?
ペンギン先生 ペンギン先生
共通の祖先AをBとCが継承し、さらにDがBとCを継承する形だよ。A由来の状態やメソッドが2つの経路を通るため、どう扱うかが問題になる。単に無関係な2つの親で名前が重なる場合とは分けて考えよう。
ひよこ ひよこ
「継承より合成」って何?
ペンギン先生 ペンギン先生
必要な機能を、親から引き継ぐ代わりに部品として持つという考え方だよ。「車は乗り物の一種」なら継承を検討できるけれど、「車はエンジンを持つ」ならエンジンを部品にするのが自然だね。合成がいつも正解という意味ではなく、表したい関係に合わせて選ぶんだ。
もっと詳しく知りたい人へ

Javaでは親のprivateフィールドやコンストラクターも継承する?

privateメンバーとコンストラクターは継承しません。親の公開されたメソッドを通してprivateフィールドを扱ったり、子のコンストラクターから親のコンストラクターを呼んだりすることはできます。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「継承」って出てきたら「親クラスの性質や機能を引き継いで子クラスを作る仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Inheritance」 = 相続・継承
💬 親から受け継ぐという意味を、クラスの性質や機能を引き継ぐ仕組みに重ねた言葉だよ。

参考資料

← 用語集にもどる