Generische Klassen Aufgabe 73 Aufrufe 8,17,21

EIDI-Crashkurs 2020 Generische Klassen Aufgabe 73 Aufrufe 8,17,21

Ansicht von 2 Beiträgen - 1 bis 2 (von insgesamt 2)
  • Autor
    Beiträge
  • #3436 Antworten
    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!!!

    #3439 Antworten
    • 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 erbt X<A> von X<C> noch umgekehrt. Die Klassen haben genauso wenig miteinander zu tun wie String und Stack – gar nichts. Dass die generischen Typen in einer Vererbungshierarchie stehen ist schön, tut aber nichts zur Sache – X<A> erbt von Object, X<C> erbt von Object.
    • q) class Q<T> extends X<T> {}  kompiliert nicht, weil der Typparameter von Q (also T) nicht eingeschränkt ist, d. h. über T ist lediglich bekannt, dass es mindestens Object sein muss. Die Oberklasse X verlangt aber einen generischen Typ, der mindestens A ist (<T extends A>).
    • u) class U<K extends A> extends X<D> {}; definiert zunächst eine Unterklasse von X<D>, d. h. bspw. es gibt die Klasse U<A>, die von X<D> erbt; es gibt die Klasse U<B>, die von X<D> erbt; es gibt die Klasse U<C>, die von X<D> erbt; und es gibt die Klasse U<D>, die von X<D> erbt. Dass hier der Typparameter nicht durchgegeben wird ist okay – muss man ja nicht.
      Das Problem liegt bei X<B> u = new U<B>();, denn U<B> ist keine Unterklasse von X<B>, also kompiliert es nicht. U<B> erbt von X<D>, nicht von X<B>.
Ansicht von 2 Beiträgen - 1 bis 2 (von insgesamt 2)
Antwort auf: Antwort #3439 in Generische Klassen Aufgabe 73 Aufrufe 8,17,21

Deine Nachricht und Pseudonym (Name) sind für alle einsehbar (Datenschutz).

Deine Information: