1) List<?> list=new ArrayList<Dog>();
List<?> is read as �List of
unknown�. It can refer to any kind of list. It is semantically equivalent to List<? extends Object> (i.e. any kind of list)
5) List<? super Dog>blist=new ArrayList<Animal>();
List<? super Dog> is read as �List of any type that is Dog or a superclass of Dog�. It can refer to any of these: List<Dog>, List<Animal> and List<Object>.
6) List<? super Animal>dlist=new ArrayList<Dog>();
List<? super Animal> is read as �List of any type that is Animal or a superclass of Animal�. It can refer to any of these: List<Animal> and List<Object>.
This is why it cannot refer to a list of Dog (List<Dog>
.