Łączenie konstruktorów w Javie jest po prostu aktem jednego konstruktora, który wywołuje inny konstruktor przez dziedzictwo. Dzieje się tak niejawnie, gdy budowana jest podklasa: jej pierwszym zadaniem jest wywołanie metody konstruktora rodzica. Ale programiści mogą również wywoływać innego konstruktora jawnie, używając słów kluczowych to() lub Wspaniały(). The to() słowo kluczowe wywołuje inny przeciążony konstruktor w tej samej klasie; Wspaniały() Słowo kluczowe wywołuje konstruktora innego niż domyślny w nadklasie.
Łączenie niejawne z konstruktorem
Łączenie konstruktorów odbywa się poprzez zastosowanie dziedziczenia. Pierwszym zadaniem metody konstruktora podklasy jest wywołanie metody konstruktora jej nadklasy. Zapewnia to, że tworzenie obiektu podklasy rozpoczyna się od inicjalizacji klas nad nim w łańcuchu dziedziczenia.
W łańcuchu spadkowym może znajdować się dowolna liczba klas. Każda metoda konstruktora wywołuje łańcuch, dopóki klasa na górze nie zostanie osiągnięta i zainicjowana. Następnie każda następna klasa poniżej jest inicjalizowana, gdy łańcuch zwija się z powrotem do oryginalnej podklasy. Ten proces nazywa się łączeniem konstruktorów.
Uwaga:
- To niejawne wywołanie superklasy jest takie samo, jakby podklasa zawierała Wspaniały() słowo kluczowe, tj. Wspaniały() jest tutaj dorozumiany.
- Jeśli konstruktor no-args nie jest uwzględniony w klasie, Java tworzy go za sceną i wywołuje go. Oznacza to, że jeśli twój jedyny konstruktor bierze argument, musisz wyraźnie użyć to() lub Wspaniały() słowo kluczowe, aby je wywołać (patrz poniżej).
Rozważ tę nadklasę Animal rozszerzoną przez Mammal:
klasa Zwierząt {
// konstruktor
Zwierzę(){
System.out.println („Jesteśmy w klasie konstruktora Animal.”);
}
}
klasa Mammal rozszerza Animal {
//constructor
Ssak(){
System.out.println („Jesteśmy w konstruktorze klasy Mammal.”);
}
}
Teraz zróbmy instancję klasy Mammal:
ChainsConstructors klasy publicznej {
/**
* @param argumentuje
*/
public static void main (String [] args) {
Ssak m = nowy Ssak ();
}
}
Po uruchomieniu powyższego programu Java domyślnie wyzwala wywołanie konstruktora Animal nadklasy, a następnie konstruktora klasy. Dane wyjściowe będą zatem:
Jesteśmy w klasie konstruktora Zwierząt
Jesteśmy w klasie konstruktora Ssaka
Jawne łączenie konstruktorów za pomocą this () lub super ()
Jawne użycie to() lub Wspaniały() słowa kluczowe pozwalają na wywołanie konstruktora innego niż domyślny.
- Aby wywołać domyślny konstruktor inny niż args lub przeciążony konstruktor z tej samej klasy, użyj to() słowo kluczowe.
- Aby wywołać niestandardowy konstruktor nadklasy z podklasy, użyj Wspaniały() słowo kluczowe. Na przykład, jeśli nadklasa ma wiele konstruktorów, podklasa może zawsze chcieć wywoływać określonego konstruktora, a nie domyślną.
Zauważ, że wywołanie innego konstruktora musi być pierwszą instrukcją konstruktora lub Jawa zgłosi błąd kompilacji.
Rozważ poniższy kod, w którym nowa podklasa Carnivore dziedziczy po klasie Mammal, która dziedziczy po klasie Animal, a każda klasa ma teraz konstruktor, który pobiera argument.
Oto superklasa Animal:
klasa publiczna ZwierzętaZauważ, że konstruktor zajmuje teraz Nazwa typu Strunowy jako parametr i który wywołuje treść klasy to() na konstruktorze. Bez wyraźnego użycia to imię, Java utworzy domyślny konstruktor bez argumentów i wywoła to zamiast tego.
prywatna nazwa ciągu;
public Animal (String name) // konstruktor z argumentem
{
this.name = nazwa;
System.out.println („Najpierw wykonuję.”);
}
}
Oto podklasa Ssak:
klasa publiczna Mammal rozszerza Animal {
public Mammal (nazwa łańcucha)
{
super (nazwa);
System.out.println („Jestem wykonywany jako drugi”);
}
}
Jego konstruktor również przyjmuje argument i używa go super (nazwa) wywoływać określonego konstruktora w jego nadklasie.
Oto kolejna podklasa Carnivore. Dziedziczy to od Mammal:
klasa publiczna Carnivore rozszerza Ssak {
public Carnivore (nazwa łańcucha)
{
super (nazwa);
System.out.println („Jestem wykonany jako ostatni”);
}
}
Po uruchomieniu te trzy bloki kodu zostaną wydrukowane:
Najpierw jestem stracony.
Jestem stracony na drugim miejscu.
Zostałem stracony jako ostatni.
Przypomnę: Po utworzeniu instancji klasy Carnivore pierwszą czynnością jej metody konstruktora jest wywołanie metody konstruktora Mammal. Podobnie pierwszym działaniem metody konstruktora Mammal jest wywołanie metody konstruktora Animal. Łańcuch wywołań metod konstruktora zapewnia, że instancja obiektu Carnivore poprawnie zainicjowała wszystkie klasy w łańcuchu dziedziczenia.