調べ物をしていた時に、共変戻り値という単語に出会ったので調べてみた。
wikiだと以下の説明になる。
- 型の順序関係を維持する (≤ で順序づけたとき、特殊から一般の順になる) とき、共変である (covariant) という。
- 型の順序関係を反転させる (≤ で順序づけたとき、一般から特殊の順になる) とき、反変である (contravariant) という。
- 上記いずれにも該当しないとき、不変である (invariant) という。
- 共変かつ反変のとき、双変である (bivariant) という。
>共変性と反変性 (計算機科学) - Wikipedia
実際に、問題になる例が挙げられていた。
戻り値が子クラスの型で定義できてしまうと、代入時にいろいろできてしまって問題になるようだ。