Ruft jeder Konstruktor in Java den Konstruktor des Objekts implizit auf?

8

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?

    
nmeln 01.07.2015, 18:33
quelle

1 Antwort

8

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.

    
rgettman 01.07.2015, 18:38
quelle

Tags und Links