List<Dog> 是 List<Animal> 的子类吗?为什么 Java 中的泛型不是多态的?
大家好!我是 Java 新手,正在尝试理解泛型。我写了一段简单的代码,但编译器报错了,我不明白为什么。
我有一个类层次结构:Animal 是父类,Dog extends Animal 和 Cat extends Animal。
现在我想写一个方法,接受动物列表并打印它们的名字。按理说,如果我传入一个狗列表,应该能正常工作,因为 Dog 是 Animal。但编译器却报错了!
代码如下:
```java
public class GenericsTest {
public static void main(String[] args) {
List dogs = new ArrayList<>();
dogs.add(new Dog("Rex"));
dogs.add(new Dog("Buddy"));
printAnimalNames(dogs); // 编译错误!
}
public static void printAnimalNames(List animals) {
for (Animal a : animals) {
System.out.println(a.getName());
}
}
}
```
错误信息:`incompatible types: List cannot be converted to List`。