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)