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 :

Konstruktör Kedja 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();
}
}



utgång:

755The Default constructor

regler för konstruktionskedja :

  1. uttrycket detta () ska alltid vara konstruktörens första rad.
  2. det bör finnas minst en konstruktör utan detta () nyckelord (konstruktör 3 i exemplet ovan).
  3. 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.

Lämna ett svar

Din e-postadress kommer inte publiceras.