Konstrukcijska veriga na Javi je preprosto dejanje enega konstruktorja, ki kliče drugega konstruktorja prek dedovanje. To se zgodi implicitno, ko je podklass izdelan: njegova prva naloga je poklicati konstrukcijsko metodo svojega nadrejenega. Toda programerji lahko s ključnimi besedami izrecno pokličejo tudi drugega konstruktorja to () ali super (). The to () ključna beseda kliče drugo preobremenjen konstruktor v istem razredu; the super () ključna beseda v superrazredu pokliče ne-privzeti konstruktor.
Neizmerna veriga konstruktorjev
Konstrukcijsko vezanje se pojavi z uporabo dedovanja. Prva naloga metode konstruktorja podrazreda je poklicati metodo konstruktorja njegovega nadklasa. To zagotavlja, da se ustvarjanje predmeta podrazreda začne z inicializacijo razredov nad njim v dedni verigi.
V dedni verigi bi lahko bilo poljubno število razredov. Vsaka metoda konstruktorja prikliče verigo, dokler ni dosežen in inicializiran razred na vrhu. Nato se vsak naslednji razred spodaj inicializira, ko se veriga vrne navzdol do prvotnega podrazreda. Ta proces se imenuje vezanje konstruktorjev.
Upoštevajte, da:
- Ta implicitni klic nadrazreda je enak, kot če bi podrazred vključeval super () ključna beseda, tj. super () je tu implicitno
- Če konstruktor no-args ni vključen v razred, Java ustvari enega v ozadju in ga prikliče. To pomeni, da če vaš edini konstruktor sprejme argument, morate izrecno uporabi to () ali super () ključno besedo za priklic (glej spodaj).
Razmislite o tej živali iz višjega razreda, ki jo je razširil sesalec:
razred Žival {
// konstruktor
Žival () {
System.out.println ("Smo v konstruktorju razreda Animal.");
}
}
razred Mammal podaljša živali {
//constructor
Sesalnik () {
System.out.println ("Smo v konstruktorju sesalca razreda.");
}
}
Zdaj pa vzbudimo razred sesalca:
javni razred ChainingConstructors {
/**
* @param argumenti
*/
javni statični void main (String [] args) {
Sesalnik m = nov Sesalnik ();
}
}
Ko se zgornji program zažene, Java implicitno sproži klic konstruktorju superklasa Animal in nato konstruktorju razreda. Rezultat bo torej:
Smo v razredu Animal konstruktor
Smo v razredu Mammal konstruktorja
Izrecno vezje konstruktorjev s to () ali super ()
Izrecna uporaba to () ali super () ključne besede vam omogočajo, da pokličete konstruktor, ki ni privzet.
- Če želite poklicati privzetega konstruktorja brez arg ali preobremenjenega konstruktorja iz istega razreda, uporabite to () ključna beseda.
- Če želite poklicati neobvezni konstruktor superklasa iz podrazreda, uporabite super () ključna beseda. Na primer, če ima nadklap več konstruktorjev, lahko podrazred vedno pokliče določen konstruktor, ne pa privzetega.
Upoštevajte, da mora biti klic drugemu konstruktorju prva izjava v konstruktorju oz Java bo vrgel napako pri sestavljanju.
Razmislite o spodnji kodi, v kateri novi podrazred, mesojedci, podeduje od razreda sesalcev, ki nasledi od razreda živali, in vsak razred ima zdaj konstruktor, ki sprejme argument.
Tu je žival superklasa:
javni razred ŽivalUpoštevajte, da zdaj konstruktor vzame a ime vrste Vrvica kot parameter in ki ga kliče telo razreda to () na konstruktorju. Brez izrecne uporabe to ime, Java bi namesto tega ustvarila privzeti konstruktor brez arg in ga pozvala.
zasebno ime niza;
javna žival (ime niza) // konstruktor z argumentom
{
this.name = ime;
System.out.println ("Izvedem najprej.");
}
}
Tu je podrazred Sesalnik:
javni razred Mammal razširja živali {
javni sesalec (ime niza)
{
super (ime);
System.out.println ("Izveden sem drugi");
}
}
Njegov konstruktor tudi argumentira in uporablja super (ime) sklicati določenega konstruktorja v svojem nadrazredu.
Tu je še en podrazred Mesojedci. To podeduje od sesalca:
Javni klanec razširja sesalce {
javni mesojedec (ime strune)
{
super (ime);
System.out.println ("Izvršen sem zadnji");
}
}
Ob zagonu bi se ti trije kodni bloki natisnili:
Izveden sem prvi.
Pogubljen sem drugi.
Zadnji sem usmrčen.
Za povzetje: Ko je ustvarjen primerek razreda Carnivore, je prvo dejanje njegove metode konstruktorja, da pokliče konstrukcijsko metodo Mammal. Prav tako je prvo dejanje metode konstruktorja sesalca poklicati metodo konstruktorja Živali. Veriga konstruktorske metode zahteva, da primerek objekta Carnivore pravilno inicializira vse razrede v dedni verigi.