¿Es List<Dog> una subclase de List<Animal>? ¿Por qué los genéricos en Java no son polimórficos?
¡Hola, colegas! Soy nuevo en Java y estoy tratando de entender los genéricos. Escribí un código simple, pero el compilador se queja y no entiendo por qué.
Tengo una jerarquía de clases: Animal es la clase padre, Dog extends Animal y Cat extends Animal.
Ahora quiero escribir un método que tome una lista de animales e imprima sus nombres. Lógicamente, si le paso una lista de perros, debería funcionar, porque Dog es un Animal. ¡Pero el compilador da un error!
Aquí está el código:
```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); // ¡Error de compilación!
}
public static void printAnimalNames(List animals) {
for (Animal a : animals) {
System.out.println(a.getName());
}
}
}
```
Error: `incompatible types: List cannot be converted to List`.