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