GeeksforGeeks
vereisten-Constructors in Java
Constructor chaining is het proces van het aanroepen van een constructor van een andere constructor met betrekking tot het huidige object.
Constructorketting kan op twee manieren worden gedaan:
- binnen dezelfde klasse: het kan gedaan worden met behulp van dit() sleutelwoord voor constructeurs in dezelfde klasse
- uit basis klasse: door super() sleutelwoord te gebruiken om constructeur uit de basis klasse aan te roepen.
Constructorketting vindt plaats door overerving. Een subklasse constructor ‘s taak is om super klasse’ S constructor eerst te bellen. Dit zorgt ervoor dat de creatie van het object van de subklasse begint met de initialisatie van de data leden van de super klasse. Er kunnen een aantal klassen in de erfenisketen zijn. Elke constructeur roept de ketting op tot de klasse aan de top is bereikt.
Waarom hebben we constructorketting nodig ?
dit proces wordt gebruikt wanneer we meerdere taken in een enkele constructor willen uitvoeren in plaats van een code voor elke taak in een enkele constructor te creëren.we maken een aparte constructor voor elke taak en maken hun keten die het programma leesbaarder maakt.
Constructor Chaining binnen dezelfde klasse met behulp van dit () trefwoord :
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();
}
}
Uitgang:
755The Default constructor
Rules of constructor chaining :
- de deze () uitdrukking moet altijd de eerste regel van de constructor zijn.
- er moet minstens één constructor zijn zonder het sleutelwoord this () (constructor 3 in bovenstaand voorbeeld).
- Constructorketting kan in elke volgorde worden bereikt.
Wat gebeurt er als we de volgorde van constructeurs wijzigen?
Niets, Constructor chaining kan worden bereikt in een willekeurige volgorde
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
);
}
}
Uitgang:
default580
OPMERKING: In Voorbeeld 1 wordt de standaard constructor aan het einde aangeroepen, maar in Voorbeeld 2 wordt de standaard constructor eerst aangeroepen. Daarom is de volgorde in de constructorketting niet belangrijk.
Constructor Chaining naar andere klasse met behulp van Super() trefwoord :
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"
);
}
}
Uitgang:
Calling parameterized constructor of baseCalling parameterized constructor of derived
Opmerking : net als in de constructor van apparaten in dezelfde klasse, super() moet de eerste regel van de constructor als super klasse constructor aangeroepen voordat de sub-klasse van de constructor.
alternatieve methode: met behulp van init block :
als we willen dat bepaalde gemeenschappelijke bronnen worden uitgevoerd met elke constructor kunnen we de code in het init block plaatsen. Init block wordt altijd uitgevoerd voordat een constructor, wanneer een constructor wordt gebruikt voor het maken van een nieuw object.
Voorbeeld 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
);
}
}
Uitgang:
init blockdefaultinit block10
OPMERKING: Als er meer dan één blokken zijn ze uitgevoerd in de volgorde waarin ze zijn gedefinieerd binnen dezelfde klasse. Ga naar de ex.
voorbeeld :
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
);
}
}
Uitgang :
initseconddefaultinitsecond10
Dit artikel is bijgedragen door Apoorva singh. Als je GeeksforGeeks leuk vindt en wil bijdragen, kun je ook een artikel schrijven met bijdragen.geeksforgeeks.org of mail uw artikel naar [email protected]. zie uw artikel verschijnen op de GeeksforGeeks hoofdpagina en help andere Geeks.