{ 协变与逆变 }

  • Java泛型-协变与逆变

    |

    概念

    协变与逆变 (Covariance and contravariance ) 用来描述具有父/子关系的类型通过类型转换之后的继承关系。

    即:如果A、B表示类型,f()表示类型转换, 表示子类与父类之间的继承关系,那么有以下定义:
    协变(Covariance):当 A $\subseteq$ B时,f(A) $\subseteq$ f(B)成立;
    逆变(contravariance):当A $\subseteq$ B时,f(B) $\subseteq$ f(A)成立;
    不变(invariance):当A $\subseteq$ B时,以上均不成立,那么f(A)与f(B)之间不存在继承关系;

    先定义几个类之间的继承关系

    1
    2
    3
    4
    5
    6
    class Fruit{}       // base

    class Apple extends Fruit{}

    class Lemon extends Fruit{}
    class Eureka extends Lemon{}