Ich weiß, dass die Klasse Object
class implizit erweitert, wenn die Klasse keine andere Klasse erweitert.
Bedeutet dies, dass wenn ich meinen Klassenkonstruktor aufruft, der Konstruktor der Basisklasse Object
ebenfalls aufgerufen wird?
Hat Object
sogar einen Konstruktor?
Ja, der Konstruktor jeder Superklasse muss explizit oder implizit bis zu Object
aufgerufen werden. Jede Klasse muss ihren Teil des Objekts erstellen, einschließlich Object
.
Die JLS, Abschnitt 8.8.7 , sagt:
Wenn ein Konstruktorkörper nicht mit einem expliziten Konstruktoraufruf beginnt und der deklarierte Konstruktor nicht Teil des primordialen Klassenobjekts ist, dann beginnt der Konstruktorkörper implizit mit einem Superklassenkonstruktoraufruf "super ();", einem Aufruf von der Konstruktor seiner direkten Superklasse, der keine Argumente annimmt.
Jeder Konstruktor ruft seinen direkten Superklassenkonstruktor auf, der seinen direkten Superklassenkonstruktor aufruft, bis der Konstruktor von Object
aufgerufen wird.
Aber was, wenn Sie in einer Klasse überhaupt keinen Konstruktor deklarieren? Der Standardkonstruktor wird implizit gemäß JLS erstellt. Abschnitt 8.8.9 :
Wenn eine Klasse keine Konstruktordeklarationen enthält, wird implizit ein Standardkonstruktor deklariert.
und
Wenn die deklarierte Klasse das primordiale Klassenobjekt ist, dann hat der Standardkonstruktor einen leeren Rumpf. Andernfalls ruft der Standardkonstruktor einfach den Superklassenkonstruktor ohne Argumente auf.
Wie auch immer, die Konstruktoren der Superklassen werden bis zu Object
aufgerufen.
Der Compiler, nicht die JVM, fügt den impliziten Aufruf in den Superklassenkonstruktor ein. Mit einer Do-Nothing-Klasse, die keinen expliziten Konstruktor hat:
%Vor%Dies ist der Bytecode:
%Vor% Der Aufruf von Object
's Konstruktor ist explizit im Byte-Code.
Tags und Links java class constructor