我对Java泛型如何处理继承/多态性有点困惑.
假设以下层次 struct -
Animal(家长)
Dog-Cat( children )
假设我有一个方法doSomething(List<Animal> animals)
.根据继承和多态性的所有规则,我会假设a List<Dog>
is a List<Animal>
和a List<Cat>
is a List<Animal>
,所以任何一个都可以传递给这个方法.不是这样.如果我想实现这种行为,我必须明确地告诉这个方法接受动物任何子类的列表,比如说doSomething(List<? extends Animal> animals)
.
我知道这是Java的行为.我的问题是why?为什么多态性通常是隐式的,但当涉及泛型时,它必须被指定?