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