Band1/2.Auflage/S.208, dritter Stichpunkt unklar

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Band1/2.Auflage/S.208, dritter Stichpunkt unklar

    Hallo,
    ich hätte gerne zum beschriebenen dritten Stichpunkt etwas nähere Informationen.
    "In der Zeile mit dem Versand der Nachricht ist als einzige Information enthalten, dass es sich um eine Intanz von Instrument oder der Subklasse Guitar handelt."

    Wenn der Compiler doch schon weiß, dass speziell eine Instanz der Subklasse Guitar gemeint sein könnte, muss der Compiler also mit Sicherheit wissen, dass sich hinter der Variablen aGuitar tatsächlich ein Guitar-Objekt befindet. Wie sonst sollte er ausschließen können, dass nicht an die Instanz einer beliebigen anderen Subklasse geschickt wird?

    Mir ist also unklar:
    1. warum in der Nachricht enthalten ist, dass entweder die Methode der Instrument-Klasse oder exakt die Methode der Guitar-Klasse gemeint ist. Müsste nicht eher die Information enthalten sein, dass die Methode einer jeden Subklasse von Instrument ebenfalls gemeint seien könnte?

    2. warum der Compiler das nicht erkennen kann, wenn sich hinter einer Variablen die Instanz einer Subklasse befindet. Er erkennt ja auch, wenn sich hinter einer Variablen die Instanz einer völlig anderen Klasse befindet, als die, mit der die Variable urspünglich deklariert wurde.

    Man kann doch grundsätzlich davon ausgehen, dass immer die Methode der Klasse ausgeführt wird, auf deren Instanz tatsächlich verwiesen wird (außer man schreibt explizit [super doSomething];). Hab ich das soweit richtig verstanden?

    Gruß,
    druesbe
  • 1. […] oder […]

    2. Der Compiler könnte das annehmen, weil er nur diese Subklassen kennt. So funktioniert das in anderen Sprachen. In diesem Falle könnte es sogar eine ganz andere Klasse sein. Er darf aber davon ausgehen, weshalb er warnt, wen du eine ganz andere Typisierung vornimmst. Er schaut sich also die Klassenhierarchie schon an. (Natürlich nur bezogen auf die Zeigervariable. Aber wenn du eine ganz andere INstanz darin hättest, würde es – je nach Einzelfall – eine Warnung bei der Zuweisung geben.)

    Die Möglichkeiten ganz andere Instanzen zu verstecken wird noch angesprochen und erklärt sich über das id. Das ist aber nichts für Anfänger. Es geht hier nur darum, dass er jedenfalls so wenig weiß, dass er keine konkrete Methode auswählen kann. Dass er darüber hinaus noch weniger weiß, ist hier nicht angesprochen, weil die bereits skizzierte Unkenntnis ausreicht, um das Dargestellte zu erläutern.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?