I added wildcards: Previously code looks: I understand that here occur relationship producer-consumer or something similar. Wildcard ? with super give me sureness that this List have ancestors and I can safely adding to it. Wildcard ? with extends give me reliability that this list is descendant from S, this mean that from D too (because S extends H, H extends D) But I don't understand difference between before code and after. I see that this give me more possibilities because before I could use only S and D class, now I have whole more spectrum of class to work. Maybe someone give me some hints about this code because this Generics Day give me headache :) (I added screens because I had problem with adding proper code)