Computerwissenschaften

Implizite und explizite Konstruktorkettung

Die Verkettung von Konstruktoren in Java ist einfach die Handlung eines Konstruktors, der einen anderen Konstruktor über Vererbung aufruft . Dies geschieht implizit, wenn eine Unterklasse erstellt wird: Die erste Aufgabe besteht darin, die Konstruktormethode des übergeordneten Elements aufzurufen. Programmierer können aber auch einen anderen Konstruktor explizit mit den Schlüsselwörtern this () oder  super () aufrufen  . Das Schlüsselwort this () ruft einen anderen überladenen Konstruktor  in derselben Klasse auf. Das Schlüsselwort super () ruft einen nicht standardmäßigen Konstruktor in einer Oberklasse auf.

 

Implizite Konstruktorkettung

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.

Es kann eine beliebige Anzahl von Klassen in einer Vererbungskette geben. Jede Konstruktormethode ruft die Kette auf, bis die Klasse oben erreicht und initialisiert wurde. Dann wird jede nachfolgende Klasse unten initialisiert, während sich die Kette zurück zur ursprünglichen Unterklasse windet. Dieser Prozess wird als Konstruktorkettung bezeichnet.

Beachten Sie, dass:

  • Dieser implizite Aufruf der Oberklasse ist derselbe, als hätte die Unterklasse das Schlüsselwort super () enthalten , dh super () ist hier implizit.
  • Wenn ein Konstruktor ohne Argumente nicht in der Klasse enthalten ist, erstellt Java einen hinter den Kulissen und ruft ihn auf. Dies bedeutet, dass Sie, wenn Ihr einziger Konstruktor ein Argument verwendet, explizit das Schlüsselwort this () oder super () verwenden müssen , um es aufzurufen (siehe unten).

Betrachten Sie dieses von Mammal erweiterte Tier der Oberklasse:

Klasse Animal { 
// Konstruktor 
Animal () {
 System.out.println ("Wir sind in der Klasse Animal's Konstruktor."); 
} 
}
Klasse Mammal erweitert Animal { 
// Konstruktor 
Mammal () {
 System.out.println ("Wir sind im Konstruktor der Klasse Mammal."); 
} 
}

Lassen Sie uns nun die Klasse Mammal instanziieren:

öffentliche Klasse ChainingConstructors {
 / ** 
* @param args 
* / 
public static void main (String [] args) { 
Mammal m=new Mammal (); 
} 
}

Wenn das obige Programm ausgeführt wird, löst Java implizit einen Aufruf des Konstruktors Animal der Oberklasse und dann des Konstruktors der Klasse aus. Die Ausgabe wird daher sein:

Wir sind in der Klasse Animal's Konstruktor 
Wir sind in der Klasse Mammal's Konstruktor

 

Explizite Konstruktorkettung mit this () oder super ()

Durch die explizite Verwendung der Schlüsselwörter this () oder super () können Sie einen nicht standardmäßigen Konstruktor aufrufen.

  • Verwenden Sie das  Schlüsselwort this () , um einen Standardkonstruktor ohne Argumente oder einen überladenen Konstruktor innerhalb derselben Klasse aufzurufen  .
  • Verwenden Sie das Schlüsselwort super () , um einen nicht standardmäßigen Konstruktor für Oberklassen aus einer Unterklasse aufzurufen . Wenn die Oberklasse beispielsweise mehrere Konstruktoren hat, möchte eine Unterklasse möglicherweise immer einen bestimmten Konstruktor anstelle des Standardkonstruktors aufrufen.

Beachten Sie, dass der Aufruf eines anderen Konstruktors die erste Anweisung im Konstruktor sein muss, da sonst Java 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 jetzt einen Konstruktor hat, der ein Argument akzeptiert.

Hier ist das Tier der Oberklasse:

öffentliche Klasse Animal 
private String name; 
public Animal (String name) // Konstruktor mit einem Argument 
{ 
this.name=name; 
System.out.println ("Ich werde zuerst ausgeführt."); 
} 
}

Beachten Sie, dass der Konstruktor jetzt einen Namen vom Typ String als Parameter verwendet und dass der Hauptteil der Klasse this () im Konstruktor aufruft . Ohne die explizite Verwendung von this.name

Hier ist die Unterklasse Säugetier:

public class Mammal erweitert Animal { 
public Mammal (String name) 
{ 
super (name); 
System.out.println ("Ich werde als Zweiter ausgeführt"); 
} 
}

Sein Konstruktor nimmt auch ein Argument an und verwendet super (name) , um einen bestimmten Konstruktor in seiner Oberklasse aufzurufen.

Hier ist eine weitere Unterklasse Fleischfresser. Dies erbt von Mammal:

public class Carnivore erweitert Mammal { 
public Carnivore (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 worden.

Um es noch einmal zusammenzufassen : Wenn eine Instanz der Carnivore-Klasse erstellt wird, besteht die erste Aktion ihrer 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.

 

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.