EIDI-Crashkurs 2020 › Generische Klassen Aufgabe 73 Aufrufe 8,17,21
- Dieses Thema hat 1 Antwort und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 5 Jahren, 9 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 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>.
- h)
-
AutorBeiträge
Ansicht von 2 Beiträgen - 1 bis 2 (von insgesamt 2)
