Dynamische Bindung

  • Themenstarter Themenstarter Wambolo
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
W

Wambolo

Gast
http://rafb.net/p/R8i86248.html

Hi,

es geht um den hier geposteten code.

Ich habe in der Vorlesung gelernt, dass die Methoden dynamisch gebunden werden, deshalb leuchtet mir ein warum in dem Beispiel immer die Methode machwas aus b2 aufgerufen wird, aber warum wird mit b.a auf a in Base zugegriffen und nicht auf a in Base2.

gruß
Wambolo
 
na weil eben methoden dynamisch gebunden werden, und die member-variablen eben nicht. Das ist alles äußerst gruselig, imho ist das eine schlecht begründete Festlegungssache. Sowas sollte man imho auch nicht "wissen". Was man aus der geschichte lernen muss, ist dass man auf keinem Fall solche Pitfalls in eigene Programme einbauen sollte. "Gebrauch machen" kann man davon nicht, man kann solche Konstruktionen lediglich vermeiden, weil einfach kein Mensch weiß was es tut.
 
Hähä, das ist ein gutes Beispiel; kannte ich noch gar nicht.

Variablen werden nicht wie (nicht-statische, nicht-private) Methoden überschrieben, bzw. virtuell referenziert.

Die Variable b ist deklariert als Base. Der Compiler weiß nicht, dass b zur Laufzeit dann zu einer Instanz von Base2 wird. Das gleiche passiert mit natürlich auch mit:
Code:
((Base) new Base2()).a
... nicht aber mit:
Code:
new Base2().a
Erklärt's das ungefähr?
 
ok, danke also werden Attriibute einfach nicht dynamisch gebunden
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben