GeeksforGeeks
Forutsetning-Konstruktører I Java
Constructor chaining er prosessen med å kalle en konstruktør fra en annen konstruktør med hensyn til gjeldende objekt.
Constructor chaining kan gjøres på to måter:
- Innen samme klasse: Det kan gjøres ved å bruke dette () søkeordet for konstruktører i samme klasse
- fra grunnklasse: ved å bruke super () søkeord for å ringe konstruktør fra grunnklassen.
Konstruktør kjeding skjer gjennom arv. En sub klasse konstruktør oppgave er å kalle super klasse konstruktør først. Dette sikrer at opprettelsen av underklassens objekt starter med initialiseringen av datamedlemmene i superklassen. Det kan være noen antall klasser i arv kjeden. Hver konstruktør kaller opp kjeden til klassen på toppen er nådd.
Hvorfor trenger vi constructor chaining ?
denne prosessen brukes når vi vil utføre flere oppgaver i en enkelt konstruktør i stedet for å lage en kode for hver oppgave i en enkelt konstruktør, lager vi en egen konstruktør for hver oppgave og gjør kjeden som gjør programmet mer lesbart.
Konstruktør Kjeding i samme klasse ved hjelp av dette () søkeordet :
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();
}
}
Utgang:
755The Default constructor
regler for konstruktørkjetting :
- dette () uttrykket skal alltid være den første linjen i konstruktøren.
- Det bør være minst en konstruktør uten dette () søkeordet (konstruktør 3 i eksemplet ovenfor).
- Constructor kjeding kan oppnås i hvilken som helst rekkefølge.
Hva skjer hvis vi endrer rekkefølgen på konstruktører?
Ingenting, Constructor chaining kan oppnås i hvilken som helst rekkefølge
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
);
}
}
Utgang:
default580
MERK: I eksempel 1, standard konstruktør påberopes på slutten, men i eksempel 2 standard konstruktør påberopes først. Derfor er ordre i konstruktørkjetting ikke viktig.
Konstruktør Kjeding til annen klasse ved hjelp av super () søkeord :
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"
);
}
}
Utgang:
Calling parameterized constructor of baseCalling parameterized constructor of derived
Merk: I Likhet med constructor chaining i samme klasse, super() bør være den første linjen i konstruktøren som super klasse konstruktør påberopes før underklassen konstruktør.
Alternativ metode: bruk Av Init-blokk:
når vi vil at visse vanlige ressurser skal utføres med hver konstruktør, kan vi sette koden i init-blokken. Init-blokk utføres alltid før en konstruktør, når en konstruktør brukes til å lage et nytt objekt.
Eksempel 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
);
}
}
Utgang:
init blockdefaultinit block10
MERK: hvis det er flere blokker, utføres de i den rekkefølgen de er definert i samme klasse. Se eksen.
Eksempel :
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
);
}
}
Utgang :
initseconddefaultinitsecond10
Denne artikkelen er bidratt Av Apoorva singh. Hvis Du liker GeeksforGeeks og ønsker å bidra, kan du også skrive en artikkel ved hjelp av contribute.geeksforgleder.org eller send artikkelen din til [email protected]. Se artikkelen din vises på GeeksforGeeks hovedside og hjelpe andre Geeks.