Statisches und dynamisches Binden

Dr Franke Ghostwriter
gibt es hier jemanden, der mir bei diesem Thema etwas Erkenntnis verschaffen kann?

1. Frage:
Ich lese immer wieder, dass der Compiler den dynamischen Typ von Instanzmethoden nicht ermitteln kann, weil sich dieser ändern kann. Wann ist das denn der Fall?

2. Frage:
Sagen wir, ich habe zwei Klassen, die Oberklasse "Artikel" und die davon abgeleitete Klasse "Pflanzen". In beiden Klassen existiert die Methode "gebeInformationenAus()" (Pflanze überschreibt sie).
Warum weiß der Compiler denn dann nicht, dass a in

Artikel a = new Pflanze();
a.gebeInformationenAus();

die Pflanzen-Methode aufruft?
 
zu Frage 2.

also ich habe mir das so gemerkt (und auch irgendwo gelesen):
Der Ausdruck new Pflanze() wird erst zur Laufzeit(runtime), also erst nach der Übersetzung (Compilezeit) ausgeführt, d.h. dass erst dann dem Pflanzenobjekt ein Speicherplatz zugewiesen wird. Artikel a ist eine Referenzvariable, die schon zur Übersetzungszeit geprüft bzw. festgelegt werden kann. Somit sucht der Compiler (Übersetzer) auch nur nach passenden Methoden, die zum Typ Artikel passen. Dies kann die Klasse Artikel sein, oder eine Oberklasse von Artikel.
Zur Laufzeit verweist die Variable dann auf das nun konkret gewordene Objekt der Klasse Pflanze. Somit wird angefangen, bereits schon in der Klasse Pflanze (wenn dort kein Treffer, dann weiter zur Oberklasse) nach einer passenden Methode zu suchen.

Frage 1 dürfte sich aus Antwort 2 ergeben.

Also wie gesagt... mir hat erst der Merksatz (das ein Objekt erst zur Laufzeit ein Speicherplatz im System zugewiesen bekommt) geholfen, die Bindung zu kapieren.

Viele Grüße!

Daniel
 
Oben