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 :

Constructor Kæde I Java

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 :

  1. dette () udtryk skal altid være konstruktørens første linje.
  2. der skal i det mindste være en konstruktør uden dette() nøgleord (konstruktør 3 i ovenstående eksempel).
  3. 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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.