Kopieren Sie den Codecode wie folgt:
öffentliche Klasse Test4 {
@Prüfen
public void test(){
Kind Kind = neues Kind();
}
}
übergeordnete Klasse{
public static String parentStaticField = „Statische Variable der übergeordneten Klasse“;
public String parentNormalField = "Normale Variable der übergeordneten Klasse";
statisch {
System.out.println(parentStaticField);
System.out.println("Statischer Block der übergeordneten Klasse");
}
{
System.out.println(parentNormalField);
System.out.println("Gewöhnlicher Block der übergeordneten Klasse");
}
öffentliches übergeordnetes Element(){
System.out.println("Konstruktor der übergeordneten Klasse");
}
}
Die untergeordnete Klasse erweitert die übergeordnete Klasse{
public static String childStaticField = „Statische Variable der Unterklasse“;
public String childNormalField = „Normale Variable der Unterklasse“;
statisch {
System.out.println(childStaticField);
System.out.println("Statischer Block der Unterklasse");
}
{
System.out.println(childNormalField);
System.out.println("Unterklasse gewöhnlicher Block");
}
öffentliches Kind(){
System.out.println("Unterklassenkonstruktor");
}
}
Ausgabe:
Kopieren Sie den Codecode wie folgt:
Statische Variable der übergeordneten Klasse
Statischer Block der übergeordneten Klasse
Statische Variablen der Unterklasse
Statischer Block der Unterklasse
Gewöhnliche Variable der übergeordneten Klasse
Normaler Block der übergeordneten Klasse
Konstruktor der übergeordneten Klasse
Unterklasse gewöhnlicher Variablen
Normaler Block der Unterklasse
Unterklassenkonstruktor
Ausführungsprozess:
1. Beim Ausführen einer neuen untergeordneten Klasse sucht der Loader nach dem Code der kompilierten untergeordneten Klasse (d. h. der Datei child.class). Während des Ladevorgangs stellt der Loader fest, dass er über eine Basisklasse verfügt, und lädt die Basisklasse erneut. Dieser Vorgang findet immer statt, unabhängig davon, ob Sie ein Basisklassenobjekt erstellen oder nicht. Wenn die Basisklasse eine weitere Basisklasse hat, wird auch die zweite Basisklasse geladen und so weiter.
2. Führen Sie eine statische Initialisierung der Stammbasisklasse durch, dann eine statische Initialisierung der nächsten abgeleiteten Klasse usw. Diese Reihenfolge ist sehr wichtig, da die „statische Initialisierung“ der abgeleiteten Klasse von der korrekten Initialisierung der Basisklassenmitglieder abhängen kann.
3. Wenn alle erforderlichen Klassen geladen wurden, erstellen Sie ein untergeordnetes Klassenobjekt.
4. Wenn die untergeordnete Klasse eine übergeordnete Klasse hat, wird der Konstruktor der übergeordneten Klasse aufgerufen. Mit super können Sie angeben, welcher Konstruktor aufgerufen werden soll.
Der Konstruktionsprozess und die Konstruktionssequenz der Basisklasse sind dieselben wie die der abgeleiteten Klasse. Zuerst wird jede Variable in der Basisklasse in literaler Reihenfolge initialisiert und dann wird der Rest des Konstruktors der Basisklasse ausgeführt.
5. Initialisieren Sie die Mitgliedsdaten der Unterklasse in der Reihenfolge, in der sie deklariert wurden, und führen Sie den Rest des Konstruktors der Unterklasse aus.