継承 けいしょう
簡単に言うとこんな感じ!
「乗り物」という設計図を作っておいたら、「車」も「バイク」もその設計図を引き継いで使えるよ、っていう仕組みだよ!同じ部分は書き直さずに済むから、コードがスッキリまとまるんだ。
継承とは
継承(Inheritance) とは、オブジェクト指向プログラミング(OOP) における仕組みの一つで、あるクラス(設計図)が持つ性質や機能を、別のクラスがそのまま受け取って使えるようにすることです。性質を受け渡す側を スーパークラス(親クラス)、受け取る側を サブクラス(子クラス) と呼びます。
たとえば「動物」クラスに「名前を持つ」「鳴く」という機能を定義しておけば、「犬」クラスや「猫」クラスはそれを継承するだけで同じ機能を最初から使えます。共通部分をまとめて書くことで、コードの重複を減らし、修正も一箇所で済む という大きなメリットがあります。
継承はオブジェクト指向の三大原則(カプセル化・継承・ポリモーフィズム)の一つとされており、大規模なシステム開発で保守性・拡張性を高めるために欠かせない概念です。
継承の構造と仕組み
親子関係のイメージ
スーパークラス(親): Animal
├── 属性: name(名前)
├── メソッド: eat()(食べる)
└── メソッド: sleep()(寝る)
サブクラス(子): Dog
├── 親から継承: name / eat() / sleep()
├── 追加の属性: breed(犬種)
└── 追加・上書き: bark()(吠える)、speak()(しゃべる)
サブクラスは親の機能をそのまま使いつつ、独自の機能を追加したり、既存の機能を上書き(オーバーライド)して変えることもできます。
主な用語一覧
| 用語 | 読み | 意味 |
|---|---|---|
| スーパークラス | すーぱーくらす | 性質を渡す側の親クラス |
| サブクラス | さぶくらす | 性質を受け取る側の子クラス |
| オーバーライド | おーばーらいど | 親のメソッドを子クラスで上書きすること |
| 単一継承 | たんいつけいしょう | 親クラスが1つだけの継承 |
| 多重継承 | たじゅうけいしょう | 複数の親クラスから継承すること(言語により可否が異なる) |
| 抽象クラス | ちゅうしょうくらす | 直接使えない「ひな型」として定義されたクラス |
覚え方:「親の財産を受け継ぐ」
🏠 親(スーパークラス)の家(機能)をそのまま子(サブクラス)が受け継ぐ。リフォーム(オーバーライド)もできるし、新しい部屋(機能)を増築(追加)もできる!
「継承=引き継ぐ」というイメージが一番しっくりくるはずです。
単一継承 vs 多重継承
| 方式 | 説明 | 採用している主な言語 |
|---|---|---|
| 単一継承 | 親クラスは必ず1つだけ | Java, C#, Swift |
| 多重継承 | 複数の親クラスを持てる | Python, C++ |
| インターフェース継承 | 機能の「約束」だけを複数から継承 | Java, C# |
歴史と背景
- 1960年代 — Simula 67(シミュラ)が世界初のオブジェクト指向言語として登場。クラスと継承の概念を初めて提唱した
- 1970年代 — Smalltalk が継承を中心とした設計哲学を確立。「すべてはオブジェクト」という考え方が広まる
- 1980年代 — C++ が登場し、多重継承をサポート。業務開発での利用が広がる
- 1990年代 — Java が「単一継承+インターフェース」という折衷案を採用。多重継承の複雑さを回避しつつ柔軟性を確保
- 2000年代以降 — Ruby、Python、Kotlin など多くのモダン言語が継承を採用。フレームワーク設計の基盤として活用される
継承と関連する主要概念
継承はオブジェクト指向の他の概念と密接につながっています。
継承とコンポジション(組み合わせ)の使い分け
「継承を使うかどうか」は設計上の重要な判断ポイントです。
| 観点 | 継承 | コンポジション(部品の組み合わせ) |
|---|---|---|
| 関係性 | 「犬 is-a 動物」(〜は〜の一種) | 「車 has-a エンジン」(〜は〜を持つ) |
| 向いている場面 | 種類の分類・共通処理のまとめ | 機能の組み合わせ・柔軟な設計 |
| 変更への強さ | 親クラス変更の影響を受けやすい | 変更が局所的に留まりやすい |
| 推奨度(現代) | 慎重に使う | 積極的に使う |
💡 現代のソフトウェア設計では「継承より合成(Composition over Inheritance)」という考え方が主流になっています。継承は便利ですが、使いすぎると変更に弱い設計になるため注意が必要です。