継承 (プログラミング)
統一モデリング言語 (UML) のクラス図では、サブクラスから見たスーパークラスは汎化 (generalization) 、スーパークラスから見たサブクラスは特化 (specialization) と呼ばれる。
純粋抽象クラスはインターフェースと定義されており、クラスから見たインターフェースは実現(realization)、クラスがインターフェースを継承することは実装(implementation)と呼ばれる。
サブタイピング用法の投影は汎化/特化の関係であり、インターフェース用法の投影は実現/実装の関係である。ミックスイン用法はUMLクラス図で扱われていない関係であり、差分プログラミング用法も同様である。
コンピュータプログラミングにおける継承(けいしょう、英: inheritance)とは、任意のオブジェクトの特性を、他のオブジェクトの特性の基礎にするためのメカニズムと定義されている。
基礎にされる継承元は親、その継承先は子と呼ばれて、状態と機能と定数と注釈などが引き継がれるが、コンストラクタとデストラクタは対象外になる。その親と子の関係を、クラスベースOOPはスーパークラスとサブクラスの関係で、プロトタイプベースOOPはプロトタイプとクローンの関係で導入している。
カプセル化の可視性(public/protected/package/private)によって、各スーパークラスメンバの受け継ぎが取捨選択されることは、派生型に対する継承の大きな特徴である。privateメンバはサブクラスに受け継がれない。packageメンバは外部パッケージのサブクラスには受け継がれない。
継承の可視性は、スーパークラスメンバ(フィールド/メソッド)の可視性に更に制約をかける機能である。三段階ある。
public継承 - そのままの継承。
protected継承 - スーパークラスのpublicメンバを、protectedメンバに引き下げて継承する。
private継承 - スーパークラスのpublic/protectedメンバを、privateメンバに引き下げて継承する。
これはC++で導入されていたが、後継OOP言語ではほとんど採用されていない。