In Java muss während des Konstruktionsprozesses einer Unterklasse der Konstruktor ihrer übergeordneten Klasse aufgerufen werden. Dies liegt daran, dass die Unterklasse den Inhalt der übergeordneten Klasse erben muss, wenn eine Vererbungsbeziehung besteht.
Die Antwort lautet wie folgt:
Wenn Sie ein Unterklassenobjekt erstellen, müssen Sie zunächst ein neues Objekt der übergeordneten Klasse erstellen. Daher ist das untergeordnete Klassenobjekt größer als das übergeordnete Klassenobjekt Reale Situation im Speicher: Wenn die Konstruktionsmethode ein neues Objekt ist, muss sie aufgerufen werden. Wenn Sie das übergeordnete Klassenobjekt neu aufrufen möchten, müssen Sie Folgendes tun:
Die erste Regel: Während des Konstruktionsprozesses einer Unterklasse muss die Konstruktionsmethode ihrer übergeordneten Klasse aufgerufen werden. Wenn wir für eine Klasse keinen Konstruktor schreiben, hilft uns der Compiler beim Hinzufügen eines Standardkonstruktors. Der sogenannte Standardkonstruktor ist ein Konstruktor ohne Parameter. Wenn Sie den Konstruktor jedoch selbst schreiben, wird der Compiler dies tun Für Sie hinzugefügt. Wenn Sie also ein neues Unterklassenobjekt erstellen, muss manchmal der Konstruktor der Unterklasse aufgerufen werden. Im Konstruktor der Unterklasse rufen wir jedoch nicht explizit den Konstruktor der Basisklasse auf, dh es gibt kein Schreiben , wie zum Beispiel: super(); wird nicht so geschrieben, aber es wird der Konstruktor ohne Parameter der übergeordneten Klasse aufgerufen. Wenn es keinen Konstruktor ohne Parameter in der übergeordneten Klasse gibt, tritt ein Fehler auf.
Die zweite Regel: Wenn im Konstruktor der Unterklasse kein expliziter Aufruf des Basisklassenkonstruktors erfolgt, ruft das System standardmäßig den parameterlosen Konstruktor der Basisklasse auf. Hinweis: Wenn im Konstruktor der Basisklasse kein expliziter Aufruf erfolgt Konstruktor der Unterklasse, und es gibt keinen Standardkonstruktor ohne Parameter in der Basisklasse. Daher müssen wir normalerweise Folgendes anzeigen: super (Parameterliste), um den Konstruktor der übergeordneten Klasse mit Parametern aufzurufen.
//Wenn Sie einen neuen Konstruktor definieren
public Animal(String name) {
this.name = Name;
}
}
öffentlicher Hund erweitert Tier{
// Zu diesem Zeitpunkt müssen Sie den Konstruktor der übergeordneten Klasse explizit aufrufen, da die Unterklasse standardmäßig die übergeordnete Klasse aufruft.
//Kein Parameterkonstruktor Animal()
öffentlicher Hund(){
super("puppy"); //Zeigt die parametrisierte Konstruktormethode zum Aufrufen der übergeordneten Klasse an
.... //Konstruktormethodenverarbeitung von Unterklassen
}
}
//Natürlich, wenn Sie den parameterlosen Konstruktor explizit in die übergeordnete Klasse schreiben, zum Beispiel:
Klasse Tier{
privater String-Name;
//Konstruktionsmethode ohne Parameter
öffentliches Tier() {
..... //bewältigen
}
/*
Wenn Sie einen neuen Konstruktor definieren, können Sie im Konstruktor der Unterklasse den Konstruktor der übergeordneten Klasse aufrufen, ohne ihn explizit aufzurufen, da die Unterklasse über einen Konstruktor ohne Parameter verfügt.
Die Unterklasse ruft automatisch den von der übergeordneten Klasse im Konstruktor definierten parameterlosen Konstruktor auf.
*/
public Animal(String name) {
this.name = Name;
}
}