Co to jest łańcuch konstruktorów?
Konstruktor w Javie to specyficzna metoda używana do tworzenia obiektów klasy. Konstruktor jest wywoływany za każdym razem, gdy tworzony jest obiekt klasy. Można go użyć do przypisania wartości właściwościom obiektu w czasie tworzenia. W klasie Java może istnieć wiele konstruktorów z różnymi listami parametrów. Łańcuch konstruktorów służy do wywoływania różnych implementacji konstruktorów tej samej klasy/klasy nadrzędnej w czasie tworzenia obiektu.
Jak łańcuch konstruktorów jest implementowany w Javie?
Istnieją dwa sposoby łączenia konstruktorów w zależności od sposobu wywołania konstruktora. Są one następujące.
- użycie słowa kluczowego this() – do wywołania konstruktorów tej samej klasy
- używając słowa kluczowego super() – do wywołania konstruktorów klasy nadrzędnej
Wyjaśniono to w poniższych przykładach.
Przykład łączenia konstruktorów nr 1 — Konstruktory są łączone za pomocą słowa kluczowego this().
Zadeklarowaliśmy cztery konstruktory dla klasy DerivedClass. Jeden bez argumentów, a pozostałe trzy z różnymi argumentami. Wewnątrz każdego konstruktora słowo kluczowe
this() służy do wywoływania następnego konstruktora tej samej klasy.
package com.tutorialwriting.constchaining;
public class DerivedClass{
String firstName;
String country;
int age;
public DerivedClass() {
// calling one argument constructor
this("Maggie");
}
public DerivedClass(String firstName) {
// calling two argument constructor
this(firstName, 15);
}
public DerivedClass(String firstName, int age) {
// calling three argument constructor
this(firstName, age, "Australia");
}
public DerivedClass(String firstName, int age, String country) {
this.firstName = firstName;
this.age = age;
this.country = country;
}
void displayValues() {
System.out.println("First Name : " + firstName);
System.out.println("Country : " + country);
System.out.println("Age : " + age);
}
public static void main(String args[]) {
DerivedClass object = new DerivedClass();
object.displayValues();
}
}
Dane wyjściowe wykonania
Przykład łączenia łańcuchów konstruktorów nr 2 — Konstruktory są łączone za pomocą słowa kluczowego super().
Tutaj klasa potomna wywołuje konstruktory klasy nadrzędnej za pomocą słowa kluczowego
super() . BaseClass ma trzy konstruktory. Konstruktor bez argumentów wywołuje jeden z trójargumentowych konstruktorów klasy BaseClass za pomocą
this() .
package com.tutorialwriting.constchaining;
public class BaseClass {
public BaseClass() {
//calling a three argument constructor of the same class
this("Male", "English", "1989/11/10");
System.out.println("I'm executed third!!!");
}
public BaseClass(String firstName, String surname, int idNo) {
System.out.println("I'm executed first!");
System.out.println("First name : " + firstName);
System.out.println("Surname : " + surname);
System.out.println("ID Number : " + idNo);
}
public BaseClass(String gender, String nationality, String birthDate) {
System.out.println("I'm executed second!!");
System.out.println("Gender : " + gender);
System.out.println("Nationality : " + nationality);
System.out.println("Birth Date : " + birthDate);
}
}
DerivedClass ma dwóch konstruktorów, z których każdy wywołuje różne konstruktory superklasy za pomocą
super() .
package com.tutorialwriting.constchaining;
public class DerivedClass extends BaseClass {
public DerivedClass() {
//calling no argument constructor of the super class
super();
}
public DerivedClass(String firstName, String surname, int idNo) {
//calling three argument constructor of the super class
super(firstName, surname, idNo);
}
public static void main(String args[]) {
DerivedClass object2 = new DerivedClass("Paul", "Wilson", 123456);
DerivedClass object1 = new DerivedClass();
}
}
Dane wyjściowe wykonania
Niejawne a jawne wywołanie konstruktora
Java ma dwa różne sposoby wywoływania konstruktorów: wywołanie niejawne i wywołanie jawne.
- Jawne wywoływanie odnosi się do jawnego wywoływania konstruktorów w kodzie za pomocą this() lub super() .
- Niejawne wywołanie odnosi się do niejawnego wywołania bezargumentowego konstruktora nadklasy w przypadku braku takiego jawnego wywołania ze strony konstruktora klasy potomnej. Innymi słowy, kompilator dodaje wywołanie super() jako pierwszą linię dowolnego konstruktora klas potomnych, jeśli programista jawnie nie wywoła super() w kodzie.
Dlaczego potrzebujemy łączenia konstruktorów?
Istnieje kilka różnych celów posiadania łańcucha konstruktorów w Javie, jak wymieniono poniżej.
- Jest to sposób na dostęp do właściwości innych konstruktorów lub właściwości klas nadrzędnych.
- Podczas wywoływania innych konstruktorów używany jest tylko jeden obiekt, którym jest bieżąca instancja klasy. Inicjalizacja odbywa się w jednym miejscu, ale mamy przywilej wywoływania różnych implementacji konstruktorów poprzez łańcuch. To bardzo pomaga w zarządzaniu pamięcią i utrzymaniu kodu.
Wniosek
W tym samouczku omówiliśmy łączenie konstruktorów w Javie. Konstruktory to podobne do metod segmenty kodu, które są wywoływane podczas tworzenia obiektów. Klasa Java może mieć dowolną liczbę konstruktorów z różnymi listami parametrów. Łańcuch konstruktorów to wygodny sposób obsługi różnych inicjalizacji za pomocą jednej instancji klasy. Poniżej wymieniono niektóre ważne punkty, na które należy zwrócić uwagę w tym samouczku.
- Jeśli programista nie doda go jawnie do kodu, kompilator dodaje do klasy Javy publiczny konstruktor bezargumentowy. Nazywa się to konstruktorem domyślnym.
- this() i super() powinny być zapisane jako pierwsza linia konstruktora.
- this() służy do wywoływania konstruktorów tej samej klasy, podczas gdy super() służy do wywoływania konstruktorów bezpośredniej nadklasy.
- W klasie powinien znajdować się co najmniej jeden konstruktor, który nie zawiera słowa kluczowego this() .
- Jeśli nie zostanie to dodane jawnie, kompilator dodaje bezargumentowe wywołanie super() do każdego konstruktora klasy potomnej. Pomoże to poprawnie utworzyć instancję klas.
GO TO FULL VERSION