我刚刚在我的编程语言课上了解到“逆变参数类型实际上是安全的,但尚未发现它们有用,因此在实际语言中不受支持。” 即使它们不受支持,我也很困惑为什么我们给出的这个例子在理论上仍然是“安全的”:
class Animal {
...
public bool compare(Panda) { ... }
}
class Panda extends Animal {
...
public bool compare(Animal) { ... }
}
据我了解,当完成某些可能导致失去特异性的事情时,就会出现子类型化问题。那么如果我这样做呢?:
Panda p = new Panda();
Animal a = new Animal
...
p.compare(a);
当我看到这个时,似乎熊猫可以(并且可能确实)有一些普通动物不会知道的额外字段。因此,即使它们所有特定于动物的数据成员都相同,熊猫也可以有其他不同的东西。将它与普通动物进行比较怎么会好呢?它会只考虑动物专用的东西而忽略其余的吗?