我理解协方差和反方差这两个术语。但是有一件小事我无法理解。在 coursera 上的“Scala 中的函数式编程”课程中,Martin Ordersky 提到:
函数的参数类型是逆变的,返回类型是协变的
因此,例如在 Java 中, let Dog
extends Animal
。让一个函数为:
void getSomething(Animal a){
我有函数调用
Dog d = new Dog();
getSomething(d)
所以基本上发生的事情就是这样Animal a = d
。根据wiki协方差是“将更宽转换为窄”。上面我们正在从狗转换为动物。那么参数类型不是协变而不是逆变吗?