Die Verkettung von Konstruktoren in Java ist einfach die Handlung eines Konstruktors, der einen anderen Konstruktor über die Vererbung aufruft. Dies geschieht implizit, wenn eine Unterklasse erstellt wird: Die erste Aufgabe besteht darin, die Konstruktormethode der übergeordneten Klasse aufzurufen. Programmierer können jedoch auch einen anderen Konstruktor explizit mit den Schlüsselwörtern aufrufen Dies() oder Super(). Das Dies() Das Schlüsselwort ruft einen anderen überladenen Konstruktor in derselben Klasse auf. das Super() Das Schlüsselwort ruft einen nicht standardmäßigen Konstruktor in einer Oberklasse auf.
Die Verkettung von Konstruktoren erfolgt durch Vererbung. Die erste Aufgabe einer Unterklassenkonstruktormethode besteht darin, die Konstruktormethode ihrer Oberklasse aufzurufen. Dadurch wird sichergestellt, dass die Erstellung des Unterklassenobjekts mit der Initialisierung der darüber liegenden Klassen in der Vererbungskette beginnt.
Eine Vererbungskette kann beliebig viele Klassen enthalten. Jede Konstruktormethode ruft die Kette auf, bis die Klasse oben erreicht und initialisiert wurde. Dann wird jede nachfolgende Klasse unten initialisiert, wenn die Kette zur ursprünglichen Unterklasse zurückgespult wird. Dieser Prozess wird als Konstruktorkettung bezeichnet.
Beachten Sie, dass:
Betrachten Sie dieses von Mammal erweiterte Superklasse-Tier:
Klasse Tier
// Konstrukteur
Tier()
System.out.println ("Wir sind im Konstruktor der Klasse Animal.");
Klasse Säugetier erweitert Tier
//Konstrukteur
Säugetier()
System.out.println ("Wir sind im Konstruktor der Klasse Mammal.");
Nun wollen wir die Klasse Mammal instanziieren:
öffentliche Klasse ChainingConstructors
/ **
* @param Argumente
* /
public static void main (String [] args)
Säugetier m = neues Säugetier ();
Wenn das obige Programm ausgeführt wird, löst Java implizit einen Aufruf des Animal-Konstruktors der Oberklasse und dann des Konstruktors der Klasse aus. Die Ausgabe wird daher sein:
Wir sind in der Klasse Tiers Konstrukteur
Wir sind in der Klasse Mammals Konstrukteur
Explizite Verwendung der Dies() oder Super() Mit keywords können Sie einen nicht standardmäßigen Konstruktor aufrufen.
Beachten Sie, dass der Aufruf eines anderen Konstruktors die erste Anweisung im Konstruktor sein muss, da Java sonst einen Kompilierungsfehler auslöst.
Betrachten Sie den folgenden Code, in dem eine neue Unterklasse, Carnivore, von der Mammal-Klasse erbt, die von der Animal-Klasse erbt, und jede Klasse verfügt nun über einen Konstruktor, der ein Argument akzeptiert.
Hier ist das Superklasse-Tier:
öffentliche Klasse TierBeachten Sie, dass der Konstruktor jetzt a annimmt Name vom Typ String als Parameter und dass der Körper der Klasse aufruft Dies() auf dem Konstruktor. Ohne die explizite Verwendung von dieser Name, Java würde einen Standardkonstruktor no-args erstellen und diesen stattdessen aufrufen.
private String name;
public Animal (String name) // Konstruktor mit einem Argument
this.name = name;
System.out.println ("Ich werde zuerst ausgeführt.");
Hier ist die Unterklasse Mammal:
public class Mammal erweitert Animal
öffentliches Säugetier (String name)
super (name);
System.out.println ("Ich werde als Zweiter ausgeführt");
Sein Konstruktor verwendet ebenfalls ein Argument super (name) einen bestimmten Konstruktor in seiner Oberklasse aufzurufen.
Hier ist noch eine Unterklasse Carnivore. Dies erbt von Mammal:
public class Carnivore erweitert Mammal
öffentlicher Fleischfresser (String name)
super (name);
System.out.println ("Ich werde zuletzt ausgeführt");
Beim Ausführen werden diese drei Codeblöcke gedruckt:
Ich werde zuerst hingerichtet.
Ich werde als Zweiter hingerichtet.
Ich bin zuletzt hingerichtet.
Um es zusammenzufassen: Wenn eine Instanz der Carnivore-Klasse erstellt wird, besteht die erste Aktion der Konstruktormethode darin, die Mammal-Konstruktormethode aufzurufen. Ebenso besteht die erste Aktion der Mammal-Konstruktormethode darin, die Animal-Konstruktormethode aufzurufen. Eine Kette von Konstruktormethodenaufrufen stellt sicher, dass die Instanz des Carnivore-Objekts alle Klassen in ihrer Vererbungskette ordnungsgemäß initialisiert hat.