オブジェクト指向プログラミング

継承 けいしょう

オブジェクト指向クラスサブクラススーパークラスポリモーフィズムコードの再利用
継承について教えて

簡単に言うとこんな感じ!

「乗り物」という設計図を作っておいたら、「車」も「バイク」もその設計図を引き継いで使えるよ、っていう仕組みだよ!同じ部分は書き直さずに済むから、コードがスッキリまとまるんだ。


継承とは

継承(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 など多くのモダン言語が継承を採用。フレームワーク設計の基盤として活用される

継承と関連する主要概念

継承はオブジェクト指向の他の概念と密接につながっています。

スーパークラス 共通の属性・メソッドを定義 サブクラスA 継承+独自機能追加 サブクラスB 継承+メソッド上書き サブクラスC 継承+新しい属性追加 オーバーライド 親メソッドを 子クラスで上書き ポリモーフィズム 同じ呼び出し方で 異なる動作を実現 抽象クラス 継承専用の ひな型クラス ▲ 継承を中心とした概念の広がり

継承とコンポジション(組み合わせ)の使い分け

「継承を使うかどうか」は設計上の重要な判断ポイントです。

観点継承コンポジション(部品の組み合わせ)
関係性「犬 is-a 動物」(〜は〜の一種)「車 has-a エンジン」(〜は〜を持つ)
向いている場面種類の分類・共通処理のまとめ機能の組み合わせ・柔軟な設計
変更への強さ親クラス変更の影響を受けやすい変更が局所的に留まりやすい
推奨度(現代)慎重に使う積極的に使う

💡 現代のソフトウェア設計では「継承より合成(Composition over Inheritance)」という考え方が主流になっています。継承は便利ですが、使いすぎると変更に弱い設計になるため注意が必要です。


関連用語