GeeksforGeeks

Prerequisite-Constructors Javassa
Constructor-ketjutus on prosessi, jossa kutsutaan yhtä konstruktoria toiselta konstruktorilta suhteessa nykyiseen kohteeseen.
rakentajan ketjuttaminen voidaan tehdä kahdella tavalla:

  • saman luokan sisällä: se voidaan tehdä käyttämällä tätä () – avainsanaa saman luokan
  • konstruktoreille perusluokasta: käyttämällä super () – avainsanaa kutsumalla konstruktoria perusluokasta.

konstruointi tapahtuu periytymisen kautta. Alaluokan konstruktorin tehtävänä on kutsua superluokan konstruktori ensin. Näin varmistetaan, että aliluokan objektin luominen alkaa superluokan datajäsenten alustuksella. Perintöketjussa voi olla mitä tahansa luokkia. Jokainen rakentaja kutsuu ylös ketjua, kunnes Luokka huipulla on saavutettu.

miksi tarvitsemme rakentajan ketjutusta ?
tätä prosessia käytetään, kun haluamme suorittaa useita tehtäviä yhdessä konstruktorissa sen sijaan, että luomme koodin jokaiselle tehtävälle yhdessä konstruktorissa, luomme erillisen konstruktorin jokaista tehtävää varten ja teemme niiden ketjun, joka tekee ohjelmasta luettavamman.

rakentaja ketjuttaa samaan luokkaan käyttäen tätä () avainsanaa :

Rakentaja Ketjuttaminen 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();
}
}



tuloste:

755The Default constructor

rakentajan ketjutussäännöt :

  1. tämän () lausekkeen tulee aina olla rakentajan ensimmäinen rivi.
  2. pitäisi olla ainakin yksi konstruktori ilman tätä () – avainsanaa (konstruktori 3 yllä olevassa esimerkissä).
  3. konstruktorin ketjutus voidaan toteuttaa missä järjestyksessä tahansa.

mitä tapahtuu, jos muutetaan rakentajien järjestystä?

Ei mitään, rakentajan ketjutus voidaan saavuttaa missä järjestyksessä tahansa

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);
}
}



tuloste:

default580

huomautus: Esimerkissä 1 default constructor kutsutaan lopussa, mutta esimerkissä 2 default constructor kutsutaan ensin. Siksi järjestys konstruktorin ketjutuksessa ei ole tärkeää.

rakentaja ketjuttaa toiseen luokkaan käyttäen super () – avainsanaa :

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");
}
}



tuloste:

Calling parameterized constructor of baseCalling parameterized constructor of derived

Huom : samaan luokkaan kuuluvan konstruktorin ketjutuksen tapaan super () tulee olla konstruktorin ensimmäinen rivi, sillä superluokan konstruktoria kutsutaan ennen alaluokan konstruktoria.

vaihtoehtoinen menetelmä : käyttämällä Init-lohkoa :
kun haluamme, että tietyt yhteiset resurssit toteutetaan jokaisen rakentajan kanssa, voimme laittaa koodin init-lohkoon. Init-lohko suoritetaan aina ennen mitään konstruktoria, aina kun konstruktoria käytetään uuden objektin luomiseen.

Esimerkki 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);
}
}



tuloste:

init blockdefaultinit block10

HUOMAUTUS: Jos lohkoja on enemmän kuin yksi, ne suoritetaan samassa järjestyksessä kuin ne on määritelty samassa luokassa. Käy exän luona.
esimerkki :

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);
}
}



tuloste :

initseconddefaultinitsecond10

artikkelin on kirjoittanut Apoorva singh. Jos pidät GeeksforGeeks ja haluat osallistua, voit myös kirjoittaa artikkelin käyttäen contribute.nörttejä.org tai lähetä artikkelisi osoitteeseen [email protected]. katso artikkeli esiintyy GeeksforGeeks pääsivulla ja auttaa muita nörttejä.

Vastaa

Sähköpostiosoitettasi ei julkaista.