GeeksforGeeks

Voraussetzung – Konstruktoren in Java
Konstruktorverkettung ist der Prozess des Aufrufs eines Konstruktors von einem anderen Konstruktor in Bezug auf das aktuelle Objekt.
Konstruktorverkettung kann auf zwei Arten erfolgen:

  • Innerhalb derselben Klasse: Dies kann mit dem Schlüsselwort this() für Konstruktoren derselben Klasse
  • Aus der Basisklasse erfolgen: Verwenden Sie das Schlüsselwort super(), um den Konstruktor aus der Basisklasse aufzurufen.

Konstruktorverkettung erfolgt durch Vererbung. Die Aufgabe eines Unterklassenkonstruktors besteht darin, zuerst den Konstruktor der Superklasse aufzurufen. Dies stellt sicher, dass die Erstellung des Objekts der Unterklasse mit der Initialisierung der Datenelemente der Oberklasse beginnt. Es kann eine beliebige Anzahl von Klassen in der Vererbungskette geben. Jeder Konstruktor ruft die Kette auf, bis die Klasse oben erreicht ist.

Warum brauchen wir Konstruktorverkettung?
Dieser Prozess wird verwendet, wenn wir mehrere Aufgaben in einem einzigen Konstruktor ausführen möchten, anstatt einen Code für jede Aufgabe in einem einzigen Konstruktor zu erstellen.

Konstruktorverkettung innerhalb derselben Klasse mit this() Schlüsselwort :

 Konstruktorverkettung in Java

class Temp
{
Temp()
{
this(5);
System.out.println("The Default constructor");
}
Temp(int x)
{
this(5, 15);
System.out.println(x);
}
Temp(int x, int y)
{
System.out.println(x * y);
}
public static void main(String args)
{
new Temp();
}
}



Ausgang:

755The Default constructor

Regeln der Konstruktorverkettung :

  1. Der this() -Ausdruck sollte immer die erste Zeile des Konstruktors sein.
  2. Es sollte mindestens einen Konstruktor ohne das Schlüsselwort this() geben (Konstruktor 3 im obigen Beispiel).
  3. Konstruktorverkettung kann in beliebiger Reihenfolge erreicht werden.

Was passiert, wenn wir die Reihenfolge der Konstruktoren ändern?

Nichts, Konstruktorverkettung kann in beliebiger Reihenfolge erreicht werden

class Temp
{
Temp()
{
System.out.println("default");
}
Temp(int x)
{
this();
System.out.println(x);
}
Temp(int x, int y)
{
this(5);
System.out.println(x * y);
}
public static void main(String args)
{
new Temp(8, 10);
}
}



Ausgang:

default580

HINWEIS: In Beispiel 1 wird der Standardkonstruktor am Ende aufgerufen, aber in Beispiel 2 wird der Standardkonstruktor zuerst aufgerufen. Daher ist die Reihenfolge in der Konstruktorverkettung nicht wichtig.

Konstruktor Verkettung mit einer anderen Klasse mit dem Schlüsselwort super() :

class Base
{
String name;
Base()
{
this("");
System.out.println("No-argument constructor of" +
" base class");
}
Base(String name)
{
this.name = name;
System.out.println("Calling parameterized constructor"
+ " of base");
}
}
class Derived extends Base
{
Derived()
{
System.out.println("No-argument constructor " +
"of derived");
}
Derived(String name)
{
super(name);
System.out.println("Calling parameterized " +
"constructor of derived");
}
public static void main(String args)
{
Derived obj = new Derived("test");
}
}



Ausgang:

Calling parameterized constructor of baseCalling parameterized constructor of derived

Hinweis: Ähnlich wie bei der Konstruktorverkettung in derselben Klasse sollte super() die erste Zeile des Konstruktors sein, da der Konstruktor der Superklasse vor dem Konstruktor der Unterklasse aufgerufen wird.

Alternative Methode: Init-Block verwenden :
Wenn wir möchten, dass bestimmte gemeinsame Ressourcen mit jedem Konstruktor ausgeführt werden, können wir den Code in den Init-Block einfügen. Der Init-Block wird immer vor einem Konstruktor ausgeführt, wenn ein Konstruktor zum Erstellen eines neuen Objekts verwendet wird.

Beispiel 1:

class Temp
{
{
System.out.println("init block");
}
Temp()
{
System.out.println("default");
}
Temp(int x)
{
System.out.println(x);
}
public static void main(String args)
{
new Temp();
new Temp(10);
}
}



Ausgang:

init blockdefaultinit block10

HINWEIS: Wenn mehrere Blöcke vorhanden sind, werden sie in der Reihenfolge ausgeführt, in der sie innerhalb derselben Klasse definiert sind. Siehe die Ex.
Beispiel :

class Temp
{
{
System.out.println("init");
}
Temp()
{
System.out.println("default");
}
Temp(int x)
{
System.out.println(x);
}
{
System.out.println("second");
}
public static void main(String args)
{
new Temp();
new Temp(10);
}
}



Ausgang :

initseconddefaultinitsecond10

Dieser Artikel wird von Apoorva Singh beigesteuert. Wenn Sie GeeksforGeeks mögen und einen Beitrag leisten möchten, können Sie auch einen Artikel mit contribute schreiben.in: geeksforgeeks.org oder mailen Sie Ihren Artikel an [email protected] . Sehen Sie sich Ihren Artikel auf der GeeksforGeeks-Hauptseite an und helfen Sie anderen Geeks.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.