CodeGym/Blog Java/Random-PL/Łańcuch konstruktorów w Javie
Autor
Volodymyr Portianko
Java Engineer at Playtika

Łańcuch konstruktorów w Javie

Opublikowano w grupie Random-PL

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.Łańcuch konstruktorów w Javie — 1

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Łańcuch konstruktorów w Javie — 2

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Łańcuch konstruktorów w Javie — 3

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.
Komentarze
  • Popularne
  • Najnowsze
  • Najstarsze
Musisz się zalogować, aby dodać komentarz
Ta strona nie ma jeszcze żadnych komentarzy