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 :
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 :
- tämän () lausekkeen tulee aina olla rakentajan ensimmäinen rivi.
- pitäisi olla ainakin yksi konstruktori ilman tätä () – avainsanaa (konstruktori 3 yllä olevassa esimerkissä).
- 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ä.