Kovarianz (in P), Kontravarianz (out P)
class C {} class E : C {}
interface I<in P> { }
class K<P> : I<P> { }
I<C> x = new K<C>();
I<E> y = x;
Unterscheidung: Schranken/Varianz:
bei Schranken geht es um die Instantiierung (Wahl der Typargument)
bei Varianz um den erzeugten Typ (seine Zuweisungskompatibilität)