Denken wir ein bisschen über die Antwort nach.
Wenn wir eine Klasse definieren, die nicht ausdrücklich eine andere Klasse erweitert,
dann wird diese automatisch Object
erweitern.
Wenn wir eine Klasse definieren, die eine andere Klasse als Object
erweitert,
dann wird jene Klasse (die wir erweitern) entweder eine andere Klasse erweitern oder Object
erweitern.
Jetzt muss jene Klasse wiederum eine andere Klasse erweitern oder Object
erweitern.
Es gibt keine Möglichkeit diese Kette zu beenden.
Wir könnten intelligenterweise versuchen eine Klasse A eine Klasse B erweitern zu lassen, und umgekehrt die Klasse B Klasse A erweitern zu lassen. Aber das (und andere Loopings) sind nicht erlaubt.
Letztendlich erbt jedes Java Objekt sein objektähnliches Verhalten
von der Klasse Object
.
Wenn ein Objekt konstruiert wird, wird eine Kette von Konstruktoren aufgerufen. Diese Kette beginnt mit dem Konstruktor der Klasse Object
und endet mit dem Konstruktor der Klasse, die verwendet wird, um ein Objekt zu konstruieren.
Die grundsätzlichen Teile des Objekts werden durch den Konstruktor der Klasse Object
zusammengestellt. Dann werden die zusätzlichen Teile, die Kette abwärts, hinzugefügt, bis die geforderte Klasse erreicht ist.
Die Konstruktion beginnt mit dem Konstruktor in Object
,
da jeder Konstruktor (mit Ausnahme des Konstruktors von Object
)
mit dem Aufruf seines super()
Konstruktors beginnt (mit oder ohne Argumente).
Muss eine Superklasse jedes Mal neu kompiliert werden, wenn eine neue Subklasse von ihr abgeleitet wird?