Is List<Dog> a subclass of List<Animal>? Why aren't Java's generics implicitly polymorphic? -


i'm bit confused how java generics handle inheritance / polymorphism.

assume following hierarchy -

animal (parent)

dog - cat (children)

so suppose have method dosomething(list<animal> animals). rules of inheritance , polymorphism, assume list<dog> is list<animal> , list<cat> is list<animal> - , either 1 passed method. not so. if want achieve behavior, have explicitly tell method accept list of subset of animal saying dosomething(list<? extends animal> animals).

i understand java's behavior. question why? why polymorphism implicit, when comes generics must specified?

no, list<dog> not list<animal>. consider can list<animal> - can add any animal it... including cat. now, can logically add cat litter of puppies? absolutely not.

// illegal code - because otherwise life bad list<dog> dogs = new arraylist<dog>(); // arraylist implements list list<animal> animals = dogs; // awooga awooga animals.add(new cat()); dog dog = dogs.get(0); // should safe, right? 

suddenly have very confused cat.

now, can't add cat list<? extends animal> because don't know it's list<cat>. can retrieve value , know animal, can't add arbitrary animals. reverse true list<? super animal> - in case can add animal safely, don't know might retrieved it, because list<object>.


Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -