EIDI-Crashkurs 2020 › Generische Klassen Aufgabe 73 Aufrufe 8,17,21
- Dieses Thema hat 1 Antwort und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 4 Jahren, 8 Monaten von Stefan Berktold.
Ansicht von 2 Beiträgen - 1 bis 2 (von insgesamt 2)
-
AutorBeiträge
-
Sandy
Guten Morgen Stefan,
vielen Dank für deine letzte ausführiche und schnelle Antwort, ich hätte noch eine zu der Aufgabe 73 im Skript.
1. Wieso kompiliert hier der Aufuf 8 –> X h = new X <C> (); nicht?
2. Wieso kompiliert der Aufruf 17 –> class Q < T> extends X <T> {}; nicht?
3. Wieso kompiliert der Aufruf 21 –> class U <K extends A > extends X<D> { }; X u = new U();
Danke schonmal im Vorraus!!!
- 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 wieString
undStack
– 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. überT
ist lediglich bekannt, dass es mindestensObject
sein muss. Die OberklasseX
verlangt aber einen generischen Typ, der mindestensA
ist (<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>
.
- h)
-
AutorBeiträge
Ansicht von 2 Beiträgen - 1 bis 2 (von insgesamt 2)