継承(けいしょう、inheritance:
インヘリタンス)とは、
オブジェクト指向を構成する概念の一つである。ある
オブジェクトが他の
オブジェクトの特性を引き継ぐ場合、両者の間に「
継承関係」があると言われる。
主に
クラスベースの
オブジェクト指向言語で、既存
クラスの機能、構造を共有する新たな
クラスを派生することができ(
サブクラス化)、そのような
クラスは「親
クラス(スーパー
クラス)を
継承した」という。具体的には
変数定義や操作(
メソッド)などが引き継がれる。またJavaのインタフェース
継承のように機能セットの仕様のみを引き継ぐ場合もある。
一般的に、BがAを
継承する場合、B is a A. (BはAの一種である)という意味的な関係(Is-a関係)が成り立つ。従って、同じふるまいを持つからと言って、意味的に無関係な
クラス間に
継承関係を持たせるのは適切でない場合が多い。
プロトタイプベースの
オブジェクト指向言語(Self、NewtonScript等)のように「
クラス」という概念を持たない場合でも、クローン元となる
オブジェクトを指して「
継承」と呼ぶ。
継承と類似の概念に「委譲」があるが、
継承では一度定まった
継承関係は通常変更されないのに対して、委譲対象は必要に応じて変更されうるものである。
Is-a関係をもつ
継承とは階層が異なる概念として集約 () とコンポジション集約 () があるが、これは
クラス間の関係がHas-aである包含関係であり、
クラス間の関係は
継承よりも疎である。