Je suis un peu confus sur la façon de Java génériques l'héritage de la poignée / le polymorphisme.
Assumer la hiérarchie suivante -
Animal (Parent)
Chien - Chat (Enfants)
Supposons donc que j'ai une méthode doSomething(List<Animal> animals)
. Toutes les règles d'héritage et de polymorphisme, je suppose qu'un List<Dog>
est un List<Animal>
et List<Cat>
est un List<Animal>
- et l'un ou l'autre ne peut être transmis à cette méthode. De ne pas faire. Si je veux obtenir ce comportement, je dois indiquer explicitement la méthode d'accepter une liste de tout sous-ensemble de l'Animal en disant doSomething(List<? extends Animal> animals)
.
Je comprends que c'est de Java comportement. Ma question est pourquoi? Pourquoi est-polymorphisme généralement implicite, mais quand il s'agit de génériques, il doit être spécifié?