Avatar ·

¿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`.