09.05.2014 Aufrufe

Leben und Sterben eines Objekts - beim O'Reilly Verlag

Leben und Sterben eines Objekts - beim O'Reilly Verlag

Leben und Sterben eines Objekts - beim O'Reilly Verlag

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.

Konstruktoren <strong>und</strong> GC<br />

Die Rolle des Superklassen-Konstruktors<br />

im <strong>Leben</strong> <strong>eines</strong> <strong>Objekts</strong>.<br />

Alle Konstruktoren im Vererbungsbaum <strong>eines</strong> <strong>Objekts</strong> müssen<br />

ausgeführt werden, wenn Sie ein neues Objekt erzeugen.<br />

Lassen Sie das sacken.<br />

Es bedeutet, dass jede Superklasse einen Konstruktor<br />

hat (weil jede Klasse einen Konstruktor hat) <strong>und</strong> dass<br />

jeder Konstruktor in der Hierarchie ausgeführt wird,<br />

wenn ein Objekt einer Unterklasse erzeugt wird.<br />

new zu sagen ist eine große Sache. Es löst die<br />

ganze Konstruktor-Kettenreaktion aus. Ja,<br />

auch abstrakte Klassen haben Konstruktoren.<br />

Obwohl man auf einer abstrakten Klasse<br />

nie new sagen kann, bleibt eine abstrakte<br />

Klasse eine Superklasse. Und deswegen<br />

wird ihr Konstruktor ausgeführt, wenn<br />

jemand eine Instanz einer konkreten<br />

Unterklasse erzeugt.<br />

Die Super-Konstruktoren werden ausgeführt,<br />

um die Superklassenteile des <strong>Objekts</strong><br />

aufzubauen. Denken Sie daran, dass<br />

eine Unterklasse Methoden erben kann,<br />

die vom Zustand der Superklasse abhängen (d.h.<br />

vom Wert von Instanzvariablen in der Superklasse).<br />

Damit ein Objekt vollständig ausgeformt ist, müssen<br />

auch seine Superklassenteile vollständig ausgeformt<br />

sein. Und deswegen muss der Superklassenkonstruktor<br />

ausgeführt werden. Alle Instanzvariablen<br />

aller Klassen im Vererbungsbaum müssen deklariert<br />

<strong>und</strong> initialisiert werden. Auch wenn die Klasse Tier<br />

Instanzvariablen hat, die Nilpferd nicht erbt (weil die<br />

Variablen beispielsweise private sind), ist das Nilpferd<br />

trotzdem noch von den Tier-Methoden abhängig, die<br />

diese Variablen nutzen.<br />

Wird ein Konstruktor ausgeführt, ruft er sofort seine<br />

Superklassenkonstruktoren auf <strong>und</strong> durchläuft<br />

dabei die ganze Hierarchie bis zum Konstruktor von<br />

Object.<br />

Auf den nächsten paar Seiten werden Sie erfahren,<br />

wie Superklassenkonstruktoren aufgerufen werden<br />

<strong>und</strong> wie Sie sie selbst aufrufen können. Sie erfahren<br />

auch, was Sie tun müssen, wenn Ihr Superklassenkonstruktor<br />

Argumente hat!<br />

k<br />

a<br />

X<br />

S<br />

b<br />

Y<br />

C<br />

Object<br />

Tier<br />

V<br />

Nilpferd<br />

Ein einzelnes Nilpferd-Objekt auf dem Heap<br />

Object<br />

Tier<br />

Nilpferd<br />

Ein neues Nilpferd-Objekt ist ein Tier<br />

<strong>und</strong> ist ein Object. Wenn Sie ein Nilpferd<br />

machen möchten, müssen Sie auch die<br />

Tier- <strong>und</strong> die Object-Teile von Nilpferd<br />

machen.<br />

All das passiert in einem Prozess, der als<br />

Konstruktorverkettung bezeichnet<br />

wird.<br />

Sie sind hier 251

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!