Implisiittinen ja eksplisiittinen konstruktoriketju

Konstruktoriketju Java on yksinkertaisesti yhden rakentajan teko, joka kutsuu toista rakentajaa kautta perintö. Tämä tapahtuu epäsuorasti, kun alaluokka rakennetaan: sen ensimmäinen tehtävä on kutsua vanhemmansa rakentajamenetelmää. Ohjelmoijat voivat myös soittaa toiselle rakentajalle nimenomaan avainsanoilla Tämä() tai Super (). Tämä() avainsana kutsuu toista ylikuormitettu rakentaja samalla luokalla; Super () avainsana kutsuu ei-oletuskonstruktoria superluokassa.

Epäsuora rakentajan ketjuttaminen

Rakentajan ketjuttaminen tapahtuu perinnöllä. Alaluokan rakentajamenetelmän ensimmäinen tehtävä on kutsua sen superluokan rakentajamenetelmää. Tämä varmistaa, että alaluokkaobjektin luominen alkaa sen yläpuolella olevien luokkien alustamisella perintöketjussa.

Perintöketjussa voi olla mikä tahansa lukumäärä luokkia. Jokainen rakentajamenetelmä kutsuu ketjun, kunnes ylin luokka on saavutettu ja alustettu. Sitten jokainen seuraava luokka alustetaan, kun ketju kääntyy takaisin alkuperäiseen alaluokkaan. Tätä prosessia kutsutaan rakentajaketjuksi.

instagram viewer

Ota huomioon, että:

  • Tämä implisiittinen kutsu superluokkaan on sama kuin jos alaluokkaan olisi sisältynyt Super () avainsana, ts. Super () on tässä implisiittinen.
  • Jos luokkaan ei sisälly no-args-konstruktoria, Java luo yhden kulissien takana ja vetoaa siihen. Tämä tarkoittaa, että jos ainoa rakentaja ottaa väitteen, sinun on tehtävä nimenomaisesti Käytä Tämä() tai Super () avainsanan käynnistämiseksi (katso alla).

Mieti tätä nisäkkään laajentamaa superluokkieläintä:

luokan eläin {
// rakentaja
Eläimen () {
 System.out.println ("Olemme luokassa Animalin rakentaja.");
}
}
luokka Nisäkäs laajentaa Animal {
//constructor
Nisäkäs () {
 System.out.println ("Olemme luokassa Nisäkkään rakentaja.");
}
}

Pidetään nyt luokka Nisäkkäät:

julkisen luokan ketjutusrakentajat {
 /**
* @param args
*/
julkinen staattinen void main (merkkijono [] args) {
Nisäkäs m = uusi nisäkäs ();
}
}

Kun yllä oleva ohjelma suoritetaan, Java laukaisee epäsuorasti puhelun superluokan Animal-konstruktorille, sitten luokan ”konstruktorille. Tuotos on siis:

Olemme luokassa Animalin rakentaja
Olemme luokassa Nisäkkään rakentaja

Täsmällinen rakentajan ketjuttaminen käyttämällä tätä () tai super ()

- järjestelmän nimenomainen käyttö Tämä() tai Super () avainsanat -sovelluksella voit soittaa ei-oletusrakentajalle.

  • Jos haluat soittaa ei-args-oletuskonstruktorille tai ylikuormitetulle konstruktorille samasta luokasta, käytä Tämä() avainsana.
  • Jos haluat kutsua ei-oletus superluokan konstruktorin alaluokasta, käytä Super () avainsana. Esimerkiksi, jos superluokassa on useita konstruktoreita, alaluokka voi aina haluta kutsua tiettyä rakentajaa oletusarvon sijaan.

Huomaa, että puhelun toiselle rakentajalle on oltava ensimmäinen lause rakennuksessa tai Jaava heittää käännösvirheen.

Mieti alla olevaa koodia, jossa uusi alaluokka, Carnivore, perii nisäkäsluokalta, joka perii Animal-luokasta, ja jokaisella luokalla on nyt rakentaja, joka ottaa argumentin.

Tässä on yliluokkainen eläin:

julkisen luokan eläin
yksityinen merkkijono nimi;
julkinen eläin (merkkijono) // rakentaja argumentilla
{
tämä.nimi = nimi;
System.out.println ("Suoritan ensin.");
}
}
Huomaa, että rakentaja ottaa nyt nimi tyyppiä jono parametrina ja että luokan runko kutsuu Tämä() rakentajan päällä. Ilman nimenomaista käyttöä Tämä nimi, Java luo oletusarvoisen no-args-konstruktorin ja kutsuu sen sen sijaan.

Tässä on alaluokka Nisäkkäät:

julkinen luokka nisäkäs laajentaa eläin {
julkinen nisäkäs (merkkijono)
{
super (nimi);
System.out.println ("Suoritan toiseksi");
}
}

Sen rakentaja ottaa myös argumentin, ja se käyttää super (nimi) kutsua tietty rakentaja sen superluokassa.

Tässä on toinen alaluokka Carnivore. Tämä perii nisäkkäältä:

julkisen luokan Carnivore laajentaa nisäkkäät {
julkinen lihansyöjä (merkkijono)
{
super (nimi);
System.out.println ("Suoritan viimeksi");
}
}

Ajon aikana nämä kolme koodilohkoa tulostaisivat:

Minä teloitetaan ensin.
Olen teloitettu toiseksi.
Olen teloitettu viimeksi.

Kiteyttää: Kun Carnivore-luokan ilmentymä luodaan, sen rakentajamenetelmän ensimmäinen toimenpide on kutsua nisäkäsrakentajamenetelmä. Samoin nisäkäsrakentajamenetelmän ensimmäinen toiminta on kutsua eläinrakentajamenetelmää. Konstruktorimenetelmäkutsuketju varmistaa, että Carnivore-objektin esiintymä on alustanut kaikki perintöketjun luokit oikein.