EIDI-Crashkurs 2020 › Aufgabe 85
- Dieses Thema hat 2 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 4 Jahren, 9 Monaten von Thomas.
-
AutorBeiträge
-
Thomas
Hi Stefan,
Könntest du mir bitte folgenden Teil der Lösungen zu Aufgabe 85 erklären:
“* nicht immer an * zuweisbar” (Teilaufgaben g, k, o, s und t)
Z.B. bei Teilaufgabe g glaube ich die Lösung zu verstehen: In Zeile 2 wird während der Compile time versucht, ein A Objekt in c zu speichern, was nicht geht. Zur Laufzeit würde (mal angenommen der Compiler Fehler würde nicht auftreten) dann der dynamische Typ von d (= D) in c gespeichert, was wiederum gehen würde. Stimmt das soweit?
k und s (“I nicht immer an C zuweisbar”) verstehe ich aktuell nicht. Würde hier versucht, ein I Objekt in d zu speichern? Ist nur der andere Weg möglich (ein C Objekt in I zu speichern)? Oder gibt es bei Interfaces nochmal Besonderheiten, welche es zu beachten gibt?
Du hast es genau richtig erklärt. Bei den anderen Teilaufgaben ist es wie bei g). Z. B. bei k) wird versucht, eine Variable vom Typ
I
an eine Variable vom TypC
zuzuweisen. Der Compiler sieht nur diese statischen Typen und überprüft nicht, was tatsächlich (dynamisch) gespeichert wird. Eine Variable vom TypI
könnte zwar einC
(oderD
) speichern (wie es hier der Fall ist), aber theoretisch (aus Compiler-Sicht) auch ein Objekt jedes anderen Typs der mindestensI
ist (also jede Klasse, dieI
implementiert). Es könnte ja nebenC
noch eine KlasseF
geben, dieI
implementiert. Die Zuweisung funktioniert daher immer nur dann, wenn der (statische) Typ der rechten Seite der Zuweisung mindestens so speziell ist wie der Typ der Variable, an die zugewiesen wird (linke Seite). Also kannst du an eine Variable vom TypC
nurC
oderD
zuweisen. An eine Variable vom TypI
kannst duC
,D
oderI
zuweisen. Die rechte Seite muss also den gleichen Typ haben oder einen Typ, der in der Vererbungshierarchie darunter steht (aber nicht darüber)!ThomasOkay, danke für die Erklärung! 🙂
-
AutorBeiträge