inheritance、インヘリタンス)とはオブジェクト指向を構成する概念の一つである。あるオブジェクトが他のオブジェクトの特性を引き継ぐ場合、両者の間に「継承関係」があると言われる。クラスベースのオブジェクト指向言語で、既存クラスの機能、構造を共有する新たなクラス(派生クラス、派生型)を定義すること(subclassing、サブクラス化)ができる。そのような派生クラスは「親クラス(スーパークラス)を継承した」という。具体的には変数定義(フィールド)や操作(メソッド)などが引き継がれる。JavaやC#などのインタフェース実装のように、機能セットの仕様(プロトコル)のみを引き継ぐ場合もある。A."(BはAの一種である)という意味的な関係(Is-a関係)が成り立つ。従って、同じふるまいを持つからと言って、意味的に無関係なクラス間に継承関係を持たせるのは適切でない場合が多い。プロトタイプベースのオブジェクト指向言語(Self、NewtonScript等)では「クラス」の概念を持たないが、クローン(複製)元となるオブジェクトからプロパティを受け継ぐことを「継承」と呼ぶこともある[1]。継承と類似の概念に「委譲」があるが、継承では一度定まった継承関係は通常変更されないのに対して、委譲対象は必要に応じて変更されうるものである。あるが、これはクラス間の関係がHas-aである包含関係であり、クラス間の関係は継承よりも疎である。継承をする意義[編集]継承をする意義は、主に以下の目的によるものである。コードの再利用[編集]継承では、スーパークラスの構造と機能がサブクラスにそのまま引き継がれるため、サブクラスでスーパークラスのコードを再利用できる。スーパークラスでハッシュテーブルの操作をする機能があった場合、サブクラスではその機能を再利用し、その上に任意のデータをハッシュ化して格納するといったような機能を追加するという具合である。これにより、一連の操作を抽象化したまま機能の追加を行うことができ、コードの再利用性が向上する。通例、スーパークラスではより汎用的で抽象的な機能を提供し、サブクラスではより特化した具体的な機能を提供する。派生型による共用と置換、多態性[編集]詳細は「派生型」を参照あるスーパークラスを継承したサブクラスは、そのスーパークラスとして振る舞うこともできる。そのスーパークラスと同等の型としての使用が可能になる。通常、静的型付けの言語では、変数には同じ型の値(もしくはインスタンス)しか格納することはできないが、継承を利用した場合では、スーパークラス型の変数(参照型変数あるいはポインタ型変数)に、そのスーパークラスを継承したサブクラスのインスタンスを格納することができる(ただしC++のprivate継承のような例外もある)。これにより、あるスーパークラスのコレクション(配列や連結リストなど)に、派生したサブクラス群を一緒に格納しておく、といったことが可能となる(ただし、スーパークラスで仮想化されておらず、サブクラスのみで追加された機能を利用するときは、適切なダウンキャストが必要となる)。あるスーパークラス型のインスタンスを引数として受け取る関数を使用する場合に、派生したサブクラス型のインスタンスを渡すことも可能となる(リスコフの置換原則)。継承の最大の意義は多態性(ポリモーフィズム)にある。スーパークラスで定義した仮想関数(仮想メソッド)を、サブクラスでオーバーライドすることで、動的な多態性を実現することができる。0;}多重継承と仮想継承[編集]複数のクラスから継承することを多重継承という。多重継承のバリエーションとして仮想継承がある。同一のクラスから継承している複数の派生クラスを多重継承して1つのクラスを作る場合に始めの基底クラスの存在をどうするかによって仮想継承と通常の多重継承の2つに分かれる。