Aufgabe 85

EIDI-Crashkurs 2020 Aufgabe 85

Ansicht von 3 Beiträgen - 1 bis 3 (von insgesamt 3)
  • Autor
    Beiträge
  • #3434 Antworten
    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?

    #3438 Antworten

    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 Typ C zuzuweisen. Der Compiler sieht nur diese statischen Typen und überprüft nicht, was tatsächlich (dynamisch) gespeichert wird. Eine Variable vom Typ I könnte zwar ein C (oder D) speichern (wie es hier der Fall ist), aber theoretisch (aus Compiler-Sicht) auch ein Objekt jedes anderen Typs der mindestens I ist (also jede Klasse, die I implementiert). Es könnte ja neben C noch eine Klasse F geben, die I 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 Typ C nur C oder D zuweisen. An eine Variable vom Typ I kannst du C, D oder I zuweisen. Die rechte Seite muss also den gleichen Typ haben oder einen Typ, der in der Vererbungshierarchie darunter steht (aber nicht darüber)!

    #3442 Antworten
    Thomas

    Okay, danke für die Erklärung! 🙂

Ansicht von 3 Beiträgen - 1 bis 3 (von insgesamt 3)
Antwort auf: Aufgabe 85

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

Deine Information: