Implicitno i eksplicitno vezanje konstruktora

Lanac graditelja u Javi je jednostavno čin jednog konstruktora koji poziva drugog konstruktora putem baština. To se podrazumijeva kad se konstruira podrazred: prvi je zadatak nazvati konstruktorsku metodu svog roditelja. Ali programeri također mogu nazvati drugog konstruktora izričito koristeći ključne riječi ovaj() ili super(). ovaj() ključna riječ poziva drugu preopterećen konstruktor u istom razredu; super() ključna riječ zove ne-zadani konstruktor u nadklasi.

Implicitno vezanje konstruktora

Lanac konstruktora nastaje upotrebom nasljeđivanja. Prvi zadatak konstruktora podrazreda je nazvati metodu konstruktora supklasa. Ovo osigurava da stvaranje objekta podrazreda započinje inicijalizacijom klasa iznad njega u nasljednom lancu.

U nasljednom lancu može biti bilo koji broj klasa. Svaka metoda konstruktora poziva lanac sve dok se ne dosegne klasa na vrhu i inicijalizira. Tada se svaka sljedeća klasa ispod inicijalizira kako se lanac vraća dolje do izvornog podrazreda. Taj se postupak naziva vezivanje konstruktora.

instagram viewer

Imajte na umu da:

  • Taj implicitni poziv nadklasi je isti kao da je podrazred uključio super() ključna riječ, tj. super() ovdje se podrazumijeva.
  • Ako konstruktor bez argova nije uključen u klasu, Java ga kreira iza scene i poziva ga. To znači da, ako vaš jedini konstruktor uzima argument, morate eksplicitno koristi ovaj() ili super() ključnu riječ da biste je pozvali (pogledajte dolje).

Razmislite o ovoj životinjskoj klasi, koju je sisavac produžio:

klasa Životinje {
// konstruktor
Životinja(){
 System.out.println ("Mi smo u klasi konstruktor Životinja.");
}
}
klasa Sisavci proširuje životinje {
//constructor
Sisavac(){
 System.out.println ("Mi smo u konstruktoru Mammal klase.");
}
}

A sada, instancirajmo klasu Sisavca:

javna klasa ChainingConstructors {
 /**
* @param argumenti
*/
javni statički void main (String [] args) {
Sisavac m = novi sisavac ();
}
}

Kada se gornji program pokrene, Java implicitno pokreće poziv konstruktoru nadredje Animal, a zatim konstruktoru klase. Rezultat će, dakle, biti:

Mi smo u klasi konstruktor Animal
Mi smo u razredu Mammal konstruktor

Izričito Chain Constructor Chaining pomoću ovog () ili super ()

Izričita uporaba ovaj() ili super() ključne riječi omogućuju vam pozivanje konstruktora koji nije zadani.

  • Da biste pozvali nekonstruirani zadani konstruktor ili preopterećeni konstruktor iz iste klase, koristite ovaj() ključne riječi.
  • Da biste iz podrazreda nazvali ne-zadani konstruktor superklase, upotrijebite the super() ključne riječi. Na primjer, ako superklasa ima više konstruktora, podklasa će uvijek morati pozvati određeni konstruktor, a ne zadani.

Imajte na umu da poziv drugom konstruktoru mora biti prva izjava u konstruktoru ili Java će baciti pogrešku u sastavljanju.

Razmotrite donji kôd u kojem novi podrazred, mesožderke, nasljeđuje od klasa sisavaca koji nasljeđuje iz klase životinja, a svaka klasa sada ima konstruktor koji uzima argument.

Evo životinja superklasa:

Javna klasa životinja
privatno ime niza;
javna životinja (ime niza) // konstruktor s argumentom
{
this.name = ime;
System.out.println ("Prvo sam izvršen.");
}
}
Imajte na umu da konstruktor sada uzima a Ime tipa Niz kao parametar i koje tijelo klase poziva ovaj() na konstruktor. Bez izričite uporabe this.name, Java bi stvorila zadani konstruktor bez argova i pozvala to.

Evo podklasa sisavaca:

javna klasa Sisavac proširio životinje {
javni sisavac (Ime niza)
{
super (ime);
System.out.println ("pogubljen sam drugi");
}
}

Njegov konstruktor također uzima argument i koristi super (ime) pozivati ​​se na određeni konstruktor u njegovom superrazredu.

Evo još jednog podrazreda mesožderke. To nasljeđuje od sisavaca:

mesožder iz javne klase širi sisavce {
javni mesožder (naziv strune)
{
super (ime);
System.out.println ("Zadnji sam izvršen");
}
}

Kad se pokrenu, ova tri bloka koda ispisat će:

Prvo sam pogubljen.
Pogubljen sam drugi.
Zadnji sam pogubljen.

Za ponovni opis: Kada se stvori instanca klase Carnivore, prva radnja njezine konstruktorske metode je pozivanje konstruktivne metode Mammal. Isto tako, prva radnja konstruktora metoda sisavaca je poziv metoda konstruktora Životinja. Lanac konstruktivne metode poziva osigurava da je instanca objekta Carnivore ispravno inicijalizirala sve klase u svom nasljednom lancu.