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转变是类型安全的,反之则是类型不安全的。