共変性と反変性 (計算機科学)
総称化データ構造での共変性と反変性は、総称化されたデータ要素のサブタイプ関係を、そのコンテナであるデータ構造のサブタイプ関係にどのように反映させるのかを定義するものである。総称化データ構造は、ジェネリッククラスとして実装されることが多い。List・Set・Mapなどが代表である。
総称化コンテナはContainer<Element>のように書式される。ここでCatをAnimalのサブタイプとすると、List<Cat>とList<Animal>のサブタイプ関係は、以下のようになる。
非変(nonvariant)は、要素型のサブタイプ関係をコンテナに反映しない。List<Cat>とList<Animal>は別系統のクラスになる。従ってList<Animal>型の変数に、List<Cat>型のインスタンスを代入するサブタイピングなどは出来ない。
共変(covariant)は、要素型のサブタイプ関係をそのまま(正方向で)コンテナに反映させる。List<Cat>はList<Animal>のサブタイプになる。