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 :
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 :
- Der this() -Ausdruck sollte immer die erste Zeile des Konstruktors sein.
- Es sollte mindestens einen Konstruktor ohne das Schlüsselwort this() geben (Konstruktor 3 im obigen Beispiel).
- 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.