05.08.2013 Aufrufe

Cornelia Heinisch, Frank Müller-Hofmann, Joachim Goll ... - HSR-Wiki

Cornelia Heinisch, Frank Müller-Hofmann, Joachim Goll ... - HSR-Wiki

Cornelia Heinisch, Frank Müller-Hofmann, Joachim Goll ... - HSR-Wiki

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Vererbung und Polymorphie 417<br />

}<br />

public String toString()<br />

{<br />

return Integer.toString (var);<br />

}<br />

public static void main (String[] args)<br />

{<br />

Object ref = new Test11();<br />

System.out.println (ref);<br />

}<br />

Die Ausgabe des Programms ist:<br />

1<br />

Es wird – wie zu erwarten – die toString()-Methode der Klasse Test11 aufgerufen<br />

und nicht die geerbte toString()-Methode der Klasse Object. Die virtuelle<br />

Maschine muss also so organisiert sein, dass dieses Verhalten möglich ist. Bekanntlich<br />

liegen die Instanzvariablen eines Objektes im Heap und die Klassenvariablen<br />

und der Bytecode für die Methoden in der Method-Area. Bis zu diesem Zeitpunkt<br />

wurde zwar schon erwähnt, dass ein jedes Objekt seine Klasse kennt, aber es wurde<br />

immer verschwiegen, wie dies realisiert ist – und dabei ist es ganz einfach. Die erste<br />

Information, die zu einem Objekt im Heap abgelegt wird, ist ein Zeiger auf die in der<br />

Method-Area liegende Klasse des Objektes. Erst dann folgen die Instanzvariablen.<br />

Bild 11-30 soll diesen Zusammenhang zeigen:<br />

Heap<br />

var = 1<br />

Method-Area<br />

Code und Klassenvariablen<br />

der Klasse<br />

Object<br />

Code und Klassenvariablen<br />

der Klasse<br />

Test11<br />

Bild 11-30 Die erste Information eines Objektes im Heap ist ein Zeiger auf die in<br />

der Method-Area liegende Klasse des Objektes<br />

Das obige Bild ist eine vereinfachte Darstellung und soll im Folgenden vervollständigt<br />

werden. Damit es möglich wird, jedes Mal die richtige Methode aufzurufen, benötigt<br />

jede Klasse noch zusätzlich eine Methodentabelle. In dieser Tabelle sind die Zeiger<br />

auf die Methodenimplementierungen aller Methoden eines Typs, die dynamisch gebunden<br />

werden können, zusammengestellt. Eine mögliche Realisierung der dynamischen<br />

Bindung könnte so wie in Bild 11-31 aussehen.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!