泛型接口的协变与抗变

1.名词解释

(1)协变:父类的对象用子类代替

(2)抗变:子类的对象用父类代替

如方法的参数是协变的,而返回值是抗变的。

2.泛型接口的协变与抗变

(1)协变:IDemo<out T>  ===》IDemo<out  ParentT>

          泛型类型T只能作为IDemo中方法或属性的返回值

(2)抗变:IDemo<in ParentT>  ===》IDemo<in T>

          泛型类型T只能作为IDemo中方法的参数

简单的,从单词out和in即可理解:out表示泛型类型只能作为返回,in表示泛型类型只能作为输入

3.为什么

由T向ParentT转变是类型安全的,反之则是类型不安全的。

原文地址:https://www.cnblogs.com/yyg1986/p/7989923.html