Hallo, folgende Aufgabe beschäftigt mich gerade, und ich könnte das Ergebnis zwar einfach so hinnehmen, aber 1) will ich es verstehen und 2) kann ich es mir nur merken, wen es für mich auch Sinn ergibt.
Hier die Aufgabe:
Die Ausgabe ist:
Was ich nicht verstehe ist folgendes: Ich finde es durchaus logisch dass erstmal eine Superklasse geladen werden muss, bevor eine davon abgeleitete Klasse geladen wird. Aber wie kommt es, dass sogar der Konstruktor der Superklasse zuerst aufgerufen wird?
Eigentlich wird doch der Konstruktor von Top erst im Konstruktor von Middle - durch ein implizites super() - aufgerufen? Aber zu dem Zeitpuntk hätte doch die Klasse Middle geladen sein müssen, sprich ihr static-block ausgeführt werden müssen..
Also die Ausgabe, die ich erwartet hätte wäre diese:
Kann mir einer erklären welche Logik da dahinter steckt? Von wem oder was wird wie durch Geisterhand der Konstruktor von Top aufgerufen, wenn ich ein Bottom()-Objekt erzeuge, und die Klassen Bottom und Middle noch nicht mal geladen sind ???:L
Hier die Aufgabe:
Java:
public class InheritanceInvokation {
public static void main(String[] args) {
new Bottom();
}
}
class Top {
{
System.out.println("A");
}
public Top() {
System.out.println("B");
}
}
class Middle extends Top {
{
System.out.println("D");
}
public Middle() {
System.out.println("E");
}
}
class Bottom extends Middle {
{
System.out.println("G");
}
public Bottom() {
System.out.println("H");
}
}
Die Ausgabe ist:
A
B
D
E
G
H
Was ich nicht verstehe ist folgendes: Ich finde es durchaus logisch dass erstmal eine Superklasse geladen werden muss, bevor eine davon abgeleitete Klasse geladen wird. Aber wie kommt es, dass sogar der Konstruktor der Superklasse zuerst aufgerufen wird?
Eigentlich wird doch der Konstruktor von Top erst im Konstruktor von Middle - durch ein implizites super() - aufgerufen? Aber zu dem Zeitpuntk hätte doch die Klasse Middle geladen sein müssen, sprich ihr static-block ausgeführt werden müssen..
Also die Ausgabe, die ich erwartet hätte wäre diese:
A
D
G
B
E
H
Kann mir einer erklären welche Logik da dahinter steckt? Von wem oder was wird wie durch Geisterhand der Konstruktor von Top aufgerufen, wenn ich ein Bottom()-Objekt erzeuge, und die Klassen Bottom und Middle noch nicht mal geladen sind ???:L