GeeksforGeeks
forudsætning – konstruktører i Java
Constructor chaining er processen med at kalde en konstruktør fra en anden konstruktør med hensyn til det aktuelle objekt.
Constructor chaining kan gøres på to måder:
- inden for samme klasse: det kan gøres ved hjælp af dette () nøgleord for konstruktører i samme klasse
- fra basisklasse: ved at bruge super() nøgleord til at kalde konstruktør fra basisklassen.
Constructor chaining sker gennem arv. En underklasse konstruktørs opgave er at kalde super class ‘ s konstruktør først. Dette sikrer, at oprettelsen af underklassens objekt starter med initialiseringen af datamedlemmerne i superklassen. Der kan være et hvilket som helst antal klasser i arvskæden. Hver konstruktør kalder kæden op, indtil klassen øverst er nået.
Hvorfor har vi brug for constructor chaining ?
denne proces bruges, når vi ønsker at udføre flere opgaver i en enkelt konstruktør i stedet for at oprette en kode for hver opgave i en enkelt konstruktør opretter vi en separat konstruktør for hver opgave og gør deres kæde, hvilket gør programmet mere læsbart.
konstruktør kæde inden for samme klasse ved hjælp af dette () søgeord :
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();
}
}
Output:
755The Default constructor
regler for konstruktørkæde :
- dette () udtryk skal altid være konstruktørens første linje.
- der skal i det mindste være en konstruktør uden dette() nøgleord (konstruktør 3 i ovenstående eksempel).
- Constructor chaining kan opnås i enhver rækkefølge.
Hvad sker der, hvis vi ændrer rækkefølgen af konstruktører?
intet, Constructor chaining kan opnås i enhver rækkefø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
);
}
}
Output:
default580
Bemærk: I eksempel 1 påberåbes standardkonstruktør i slutningen, men i eksempel 2 påberåbes standardkonstruktør først. Derfor er orden i konstruktørkæde ikke vigtig.
konstruktør kæde til anden klasse ved hjælp af super () søgeord :
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"
);
}
}
Output:
Calling parameterized constructor of baseCalling parameterized constructor of derived
Bemærk: I lighed med konstruktørkæde i samme klasse skal super() være den første linje i konstruktøren, da superklassens konstruktør påberåbes før underklassens konstruktør.
alternativ metode : brug af Init-blok:
når vi ønsker, at visse fælles ressourcer skal udføres med hver konstruktør, kan vi sætte koden i init-blokken. Init block udføres altid før enhver konstruktør, når en konstruktør bruges til at oprette et nyt 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
);
}
}
Output:
init blockdefaultinit block10
BEMÆRK: Hvis der er mere end en blok, udføres de i den rækkefølge, de er defineret inden for 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
);
}
}
Output :
initseconddefaultinitsecond10
denne artikel er bidraget af Apoorva singh. Hvis du kan lide GeeksforGeeks og gerne vil bidrage, kan du også skrive en artikel ved hjælp af contribute.geeksforgeeks.org eller mail din artikel til [email protected]. se din artikel vises på GeeksforGeeks hovedsiden og hjælpe andre nørder.