Sei A Vater von B und B Vater von C.
? extends A bedeutet: alles wo A Vater ist (A,B,C)
?super A bedeutet; alles wo A Kind ist (A)
Beispiel : f(Box<? extends A> box) (Kovarianz)
Übergeben können Boxen von As, Bs oder Cs
A a = box.get() erlaubt
box.set(a), box.set(b), box.set(c) nicht erlaubt, da Box entweder Box<A> oder Box<B> oder Box<C> ist.
Beispiel : f(Box<? super A> box) (Kontravarianz)
Übergeben kann nur Box von As (oder Väter von As)
Object o = box.get() erlaubt (kann aber nur Objekt sein)
box.set(a), box.set(b), box.set(c) erlaubt, da B (C) ein A ist