EIDI-Crashkurs 2020 › Generische Klassen Aufgabe 73 Aufrufe 8,17,21 › Antwort auf: Generische Klassen Aufgabe 73 Aufrufe 8,17,21
18.02.2020 um 11:45 Uhr
#3439
- h)
X<A> h = new X<C>();kompiliert nicht, weil der Typ der Variable (X<A>) nichts mit dem Typ des Objekts (X<C>) zu tun hat, d. h. weder erbtX<A>vonX<C>noch umgekehrt. Die Klassen haben genauso wenig miteinander zu tun wieStringundStack– gar nichts. Dass die generischen Typen in einer Vererbungshierarchie stehen ist schön, tut aber nichts zur Sache –X<A>erbt vonObject,X<C>erbt vonObject. - q) class
Q<T> extends X<T> {}kompiliert nicht, weil der Typparameter vonQ(alsoT) nicht eingeschränkt ist, d. h. überTist lediglich bekannt, dass es mindestensObjectsein muss. Die OberklasseXverlangt aber einen generischen Typ, der mindestensAist (<T extends A>). - u)
class U<K extends A> extends X<D> {};definiert zunächst eine Unterklasse vonX<D>, d. h. bspw. es gibt die KlasseU<A>, die vonX<D>erbt; es gibt die KlasseU<B>, die vonX<D>erbt; es gibt die KlasseU<C>, die vonX<D>erbt; und es gibt die KlasseU<D>, die vonX<D>erbt. Dass hier der Typparameter nicht durchgegeben wird ist okay – muss man ja nicht.
Das Problem liegt beiX<B> u = new U<B>();, dennU<B>ist keine Unterklasse vonX<B>, also kompiliert es nicht.U<B>erbt vonX<D>, nicht vonX<B>.
