我刚刚在我的编程语言课上学到“逆变参数类型实际上是安全的,但它们没有被发现有用,因此在实际语言中不被支持。”即使他们不支持,我很困惑,为什么这样的例子中,我们分别给予仍然是,从理论上讲,“安全”:为什么这些逆变参数类型被认为是安全的?
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);
当我看着这个,看起来像熊猫可能(可能确实)有一些额外的领域,普通的动物不知道。因此,即使他们所有的动物特定数据成员都是相同的,熊猫也可以有其他不同的东西。如何将它与一个普通的动物相比较呢?它会只考虑动物的东西,而忽略其余的东西吗?