Kaudne ja eksplitsiitse konstruktori aheldamine

click fraud protection

Konstruktorite aheldamine Java-s on lihtsalt ühe konstruktori toiming, kelle kaudu kutsutakse teist konstruktorit pärimine. See juhtub kaudselt alamklassi konstrueerimisel: selle esimene ülesanne on kutsuda oma vanema konstruktorimeetodit. Kuid programmeerijad võivad ka mõnda muud ehitajat otse märksõnade abil helistada see () või Super(). see () märksõna kutsub teist ülekoormatud konstruktor samas klassis; Super() märksõna kutsub superklassi mitte-vaikimisi konstruktorit.

Kaudne konstruktori aheldamine

Konstruktorite aheldamine toimub pärandi kasutamise kaudu. Alamklassi konstruktori meetodi esimene ülesanne on kutsuda selle superklassi konstruktori meetod. See tagab, et alaklassi objekti loomine algab selle kohal olevate klasside initsialiseerimisega pärandiahelas.

Pärimisahelas võib olla ükskõik milline klass. Iga konstrueerimismeetod kutsub keti üles, kuni tippu jõudmise klass on jõutud ja initsialiseeritud. Seejärel lähtestatakse iga järgmine klass, kui kett kerib tagasi algsesse alaklassi. Seda protsessi nimetatakse konstruktori aheldamiseks.

instagram viewer

Pange tähele, et:

  • See kaudne kutse superklassi on sama, kui alamklass oleks hõlmanud Super() märksõna, s.t. Super() on siin kaudne.
  • Kui klassi ei kuulu no-args-konstruktor, loob Java selle kulisside taha ja kutsub selle esile. See tähendab, et kui teie ainus konstruktor võtab vastu argumendi, peate seda tegema otsesõnu kasuta see () või Super() märksõna käivitamiseks (vt allpool).

Mõelge sellele imetaja laiendatud üleklassilisele loomale:

klassi loom {
// ehitaja
Loom(){
 System.out.println ("Oleme klassis Animal konstruktor.");
}
}
klass Imetaja laiendab Animal {
//constructor
Imetaja () {
 System.out.println ("Oleme klassis Imetaja konstruktor.");
}
}

Lihtsustame nüüd klassi Imetaja:

avalik klass ChainingConstructors {
 /**
* @param args
*/
avalik staatiline tühine pea (string [] args) {
Imetaja m = uus imetaja ();
}
}

Ülaltoodud programmi käivitamisel käivitab Java kaudselt kõne superklassi Animal konstruktorile, seejärel klassi konstruktorile. Seetõttu on väljund:

Oleme klassis Animali konstruktor
Oleme klassis Imetaja konstruktor

Ehitaja otsene aheldamine selle () või super () abil

Programmi otsene kasutamine see () või Super() märksõnad võimaldavad helistada vaikekonstruktorile.

  • Argsest vaikekonstruktoriks või sama klassi ülekoormatud konstruktoriks helistamiseks kasutage klahvi see () märksõna.
  • Valaklassi mitteklassilise konstrukatori kutsumiseks alaklassist kasutage Super() märksõna. Näiteks kui superklassil on mitu konstruktorit, võib alamklass soovida alati vaikimisi helistada kindlale konstruktorile.

Pange tähele, et teise konstruktori kutse peab olema esimene lause konstruktoris või Java viskab kompileerimisvea.

Mõelge allolevale koodile, milles uus alamklass Carnivore pärib imetajate klassilt, mis pärib loomaklassilt, ja igal klassil on nüüd konstruktor, kes võtab vastu argumendi.

Siin on superklassi loom:

avaliku klassi loom
privaatne keelnimi;
avalik loom (stringinimi) // konstruktor argumendiga
{
see.nimi = nimi;
System.out.println ("Mind hukatakse kõigepealt.");
}
}
Pange tähele, et ehitaja võtab nüüd a nimi tüüpi Keel parameetrina ja et klassi keha kutsub see () ehitaja peal. Ilma selgesõnalise kasutamiseta see.nimi, Loob Java vaikimisi no-args konstrukatori ja kutsub selle hoopis esile.

Siin on alaklass Imetajad:

avaliku klassi imetaja laiendab looma {
avalik imetaja (stringinimi)
{
super (nimi);
System.out.println ("Ma hukatakse teist korda");
}
}

Selle konstruktor võtab ka argumendi ja seda ta kasutab super (nimi) kutsuda konkreetne konstruktor selle superklassis.

Siin on veel üks alaklass Carnivore. See pärib imetajalt:

avaliku klassi Carnivore laiendab imetajale {
avalik lihasööja (stringinimi)
{
super (nimi);
System.out.println ("Ma hukatakse viimati");
}
}

Käitamisel prinditakse need kolm koodiplokki:

Mind hukatakse esimesena.
Mind hukatakse teisel kohal.
Mind hukatakse viimati.

Kokkuvõtteks: Kui lihasööja klassi eksemplar on loodud, on selle konstruktorimeetodi esimene toiming kutsuda imetajakonstruktori meetodit. Samamoodi on imetajakonstruktori meetodi esimene toiming kutsuda loomakonstruktori meetodiks. Ehitaja meetodikõnede ahel tagab, et Carnivore objekti eksemplar on õigesti initsialiseerinud kõik pärandiahela klassid.

instagram story viewer