Avatar ·

List<Dog> é uma subclasse de List<Animal>? Por que os genéricos em Java não são polimórficos?

Olá, colegas! Sou novo em Java e estou tentando entender os genéricos. Escrevi um código simples, mas o compilador reclama e não entendo por quê. Tenho uma hierarquia de classes: Animal é a classe pai, Dog extends Animal e Cat extends Animal. Agora quero escrever um método que aceite uma lista de animais e exiba seus nomes. Logicamente, se eu passar uma lista de cães, deveria funcionar, já que Dog é um Animal. Mas o compilador dá erro! Aqui está o 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); // Erro de compilação! } public static void printAnimalNames(List animals) { for (Animal a : animals) { System.out.println(a.getName()); } } } ``` Erro: `incompatible types: List cannot be converted to List`.