List<Dog>是List<Animal>的子类吗?为什么 Java 泛型不是隐式多态的?
我对Java泛型如何处理继承/多态性有点困惑。
假设层次结构如下 -
动物(亲本)
狗 - 猫(儿童)
所以假设我有一个方法。根据继承和多态性的所有规则,我假设 a 是 a,a 是 a - 因此任何一个都可以传递给此方法。事实并非如此。如果我想实现这种行为,我必须明确地告诉该方法接受动物的任何子类的列表,方法是说。doSomething(List<Animal> animals)
List<Dog>
List<Animal>
List<Cat>
List<Animal>
doSomething(List<? extends Animal> animals)
我知道这是Java的行为。我的问题是为什么?为什么多态性通常是隐式的,但是当涉及到泛型时,必须指定它?