泛型接口的协变与抗变

一、泛型接口的协变与抗变

1、泛型接口的协变与抗变是对于泛型接口的参数存在类继承关系,一般子类到父类存在隐式转换即把子类new对象赋值给父类定义的变量这个是类型安全的转换,该规则在泛型接口则使用协变和抗变的特性表达,提高代码的灵活度,其目的就是类型间的隐式转换。

2、协变

协变是子类泛型接口对象赋予父类即子类到父类的过程,由隐式转换规则其是类型安全的,所以定义其是传出参数使用标签out进行声明(否则类型安全检查会报异常),传出参数表明该过程是右边创建的泛型接口子类对象通过隐式转换返回给左边定义的泛型接口父类。

3、抗变

抗变是父类泛型接口对象赋予子类即父类到子类的过程,一般父类到子类是不能隐式转换的非类型安全,所以定义其是传入参数使用标签in进行声明(否则类型安全检查会报异常),传入参数表明该过程是定义的参数是父类,现在传入子类对象的参数则实现了隐式转换的目的。

总结:协变和抗变最终实现都是子类到父类的类型安全隐式转换,协变意思是变化方向相同子类到父类,而抗变是父类到子类其变化方向相反。

ps:对象的引用存在仅存在一种隐式类型转换,即子类型的对象引用到父类型的对象引用的转换。

猜你喜欢

转载自www.cnblogs.com/tuqunfu/p/12536008.html