Netieša un nepārprotama konstruktora ķēde

Konstruktora ķēde Java ir vienkārši viena konstruktora rīcība, ar kura palīdzību izsauc citu konstruktoru mantojums. Tas notiek netieši, veidojot apakšklasi: tās pirmais uzdevums ir izsaukt vecāku konstruktora metodi. Bet programmētāji var arī piezvanīt citam konstruktoram, tieši izmantojot atslēgvārdus šis () vai super (). šis () atslēgvārds izsauc citu pārslogots konstruktors tajā pašā klasē; super () atslēgvārds izsauc virsklases konstruktoru, kas nav noklusējuma vērtība.

Netieša konstruktora ķēde

Konstruktora ķēdēšana notiek, izmantojot mantojumu. Apakšklases konstruktora metodes pirmais uzdevums ir izsaukt tās superklases konstruktora metodi. Tas nodrošina, ka apakšklases objekta izveidošana sākas ar klašu inicializēšanu virs tā mantojuma ķēdē.

Mantojuma ķēdē var būt jebkurš klašu skaits. Katra konstruktora metode izsauc ķēdi, līdz tiek sasniegta un inicializēta klase augšpusē. Pēc tam katra nākamā klase tiek inicializēta, kad ķēde atgriežas sākotnējā apakšklasē. Šo procesu sauc par konstruktora ķēdi.

instagram viewer

Pieraksti to:

  • Šis netiešais izsaukums uz superklases klasi ir tāds pats kā tad, ja apakšklasē būtu iekļauts super () atslēgvārds, t.i. super () šeit ir netiešs.
  • Ja klasē nav iekļauts konstruktīvs speciālists, Java izveido to aiz ainas un izsauc to. Tas nozīmē, ka, ja jūsu vienīgais konstruktors ņem argumentu, jums tas ir jādara tieši lieto šis () vai super () atslēgvārds, lai to izsauktu (skatīt zemāk).

Apsveriet šo superaugstas klases dzīvnieku, kuru pagarinājis Zīdītājs:

klases dzīvnieks {
// konstruktors
Dzīvnieks () {
 System.out.println ("Mēs esam klases Dzīvnieku konstruktors.");
}
}
klase Zīdītāji paplašina Dzīvnieku {
//constructor
Zīdītājs () {
 System.out.println ("Mēs esam Zīdītāju klases konstruktors.");
}
}

Tagad padarīsim klasi Zīdītāji:

sabiedriskās klases ChainingConstructors {
 /**
* @param args
*/
public static void main (stīgas [] args) {
Zīdītājs m = jauns Zīdītājs ();
}
}

Kad šī programma darbojas, Java netieši izsauc izsaukumu superklases Animal konstruktoram, pēc tam klases konstruktoram. Rezultāts būs:

Mēs esam klases Animal konstruktors
Mēs esam Zīdītāja klases konstruktors

Nepārprotama konstruktora ķēde, izmantojot šo () vai super ()

Skaidra šis () vai super () Atslēgvārdi ļauj izsaukt konstruktoru, kurš nav noklusējuma iestatījumu.

  • Lai izsauktu noklusējuma konstruktoru vai pārslogotu konstruktoru no vienas klases, izmantojiet šis () atslēgvārds.
  • Lai izsauktu virsklases konstruktoru, kas nav noklusējuma no apakšklases, izmantojiet super () atslēgvārds. Piemēram, ja superklasē ir vairāki konstruktori, apakšklase vienmēr var vēlēties izsaukt konkrētu konstruktoru, nevis noklusējuma.

Ņemiet vērā, ka aicinājumam citam konstruktoram jābūt pirmajam paziņojumam konstruktorā vai Java izmetīs kompilācijas kļūdu.

Apsveriet zemāk esošo kodu, kurā jauna apakšklase Carnivore manto no Zīdītāju klases, kas manto no Dzīvnieku klases, un tagad katrai klasei ir konstruktors, kurš ņem argumentus.

Šeit ir augstākās klases dzīvnieks:

sabiedriskās klases dzīvnieks
privāts stīgas nosaukums;
publisks dzīvnieks (stīgas nosaukums) // konstruktors ar argumentu
{
this.name = vārds;
System.out.println ("Es esmu izpildīts pirmais.");
}
}
Ņemiet vērā, ka konstruktors tagad ņem a vārds tipa Stīgu kā parametru un klases klasei piezvanot šis () uz konstruktora. Bez tieša šis.vārds, Java izveidos noklusējuma konstruktoru, kam nav pamata, un tā vietā to izsauks.

Šeit ir apakšklase Zīdītāji:

sabiedriskās klases Zīdītāji paplašina Dzīvnieku {
publisks zīdītājs (stīgas nosaukums)
{
super (vārds);
System.out.println ("Esmu izpildīts otrais");
}
}

Tā konstruktors arī ņem argumentu, un tas izmanto super (vārds) izsaukt konkrētu konstruktoru tā superklasē.

Šeit ir vēl viena apakšklase Carnivore. To iegūst no zīdītājiem:

sabiedriskās klases plēsējs pagarina Zīdītāju {
sabiedriskais plēsējs (stīgas nosaukums)
{
super (vārds);
System.out.println ("Esmu izpildīts pēdējais");
}
}

Palaižot, tiks izdrukāti šie trīs koda bloki:

Es esmu izpildīts pirmais.
Esmu izpildīts otrajā kārtā.
Esmu izpildīts pēdējais.

Atgādināt: Kad tiek izveidots plēsēju klases piemērs, tā konstruktora metodes pirmā darbība ir izsaukt Zīdītāju konstruktora metodi. Tāpat Zīdītāju konstruktora metodes pirmā darbība ir izsaukt Dzīvnieka konstruktora metodi. Konstruktora metodes izsaukumu ķēde nodrošina, ka plēsēja objekts ir pareizi inicializējis visas mantošanas ķēdes klases.