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
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