GeeksforGeeks
förutsättning-konstruktörer i Java
Constructor chaining är processen att ringa en konstruktör från en annan konstruktör med avseende på aktuellt objekt.
Constructor chaining kan göras på två sätt:
- inom samma klass: det kan göras med hjälp av detta() nyckelord för konstruktörer i samma klass
- från basklass: genom att använda super() nyckelord för att ringa Konstruktör från basklassen.
Constructor chaining sker genom arv. En underklasskonstruktörs uppgift är att ringa superklassens konstruktör först. Detta säkerställer att skapandet av underklassens objekt börjar med initialiseringen av datamedlemmarna i superklassen. Det kan finnas ett antal klasser i arvskedjan. Varje konstruktör ringer upp kedjan tills klassen på toppen nås.
Varför behöver vi konstruktörskedja ?
denna process används när vi vill utföra flera uppgifter i en enda konstruktör snarare än att skapa en kod för varje uppgift i en enda konstruktör skapar vi en separat konstruktör för varje uppgift och gör deras kedja vilket gör programmet mer läsbart.
Constructor Chaining inom samma klass med detta () nyckelord :
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();
}
}
utgång:
755The Default constructor
regler för konstruktionskedja :
- uttrycket detta () ska alltid vara konstruktörens första rad.
- det bör finnas minst en konstruktör utan detta () nyckelord (konstruktör 3 i exemplet ovan).
- Constructor chaining kan uppnås i vilken ordning som helst.
vad händer om vi ändrar konstruktörernas ordning?
ingenting, Konstruktörkedjning kan uppnås i vilken ordning som helst
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
);
}
}
utgång:
default580
notera: I Exempel 1 anropas default constructor i slutet, men i Exempel 2 anropas default constructor först. Därför är ordning i konstruktörkedjning inte viktig.
konstruktör kedja till annan klass med hjälp av Super() sökord :
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"
);
}
}
utgång:
Calling parameterized constructor of baseCalling parameterized constructor of derived
I likhet med konstruktörkedjning i samma klass bör super() vara konstruktörens första rad eftersom superklassens konstruktör åberopas före underklassens konstruktör.
alternativ metod : använda init-block:
när vi vill att vissa gemensamma resurser ska köras med varje konstruktör kan vi lägga koden i init-blocket. Init block körs alltid före någon konstruktör, när en konstruktör används för att skapa ett nytt objekt.
exempel 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
);
}
}
utgång:
init blockdefaultinit block10
OBS!: Om det finns fler än ett block körs de i den ordning de definieras inom samma klass. Se före detta.
exempel :
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
);
}
}
utgång :
initseconddefaultinitsecond10
denna artikel är bidragen av Apoorva singh. Om du gillar GeeksforGeeks och vill bidra kan du också skriva en artikel med contribute.geeksforgeeks.org eller maila din artikel till [email protected]. se din artikel som visas på GeeksforGeeks huvudsida och hjälp andra nördar.