Какво е верижно свързване на конструктор?

Конструкторът в Java е специфичен метод, използван при създаването на обект на клас. Конструкторът се извиква всеки път, когато се създава обект от класа. Може да се използва за присвояване на стойности на свойствата на обекта по време на създаване. Може да има множество конструктори в Java клас с различни списъци с параметри. Верижното свързване на конструктори се използва за извикване на различни реализации на конструктори от един и същи клас/родителски клас по време на създаване на обекта.

Как се реализира верижното свързване на конструктори в Java?

Има два начина за верижно свързване на конструктори въз основа на това How да се извика конструкторът. Те са Howто следва.
  • използване на ключова дума this() – за извикване на конструктори от същия клас
  • използване на ключова дума super() – за извикване на конструктори на родителския клас
Това е обяснено в следните примери.Верижно свързване на конструктори в Java - 1

Пример за верижно свързване на конструктор #1 – Конструкторите са свързани с верига чрез ключова дума this().

Ние сме декларирали четири конструктора за DerivedClass. Един без аргументи, а другите три с различни аргументи. Във всеки конструктор ключовата дума this() се използва за извикване на следващия конструктор от същия клас.

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();
    }
}
Резултатът от изпълнениетоВерижно свързване на конструктори в Java - 2

Пример за верижно свързване на конструктор № 2 – Конструкторите са верижни с помощта на ключовата дума super().

Тук дъщерният клас извиква конструкторите на родителския клас с помощта на ключовата дума super() . BaseClass има три конструктора. Конструкторът без аргументи извиква един от конструкторите с три аргумента на BaseClass, използвайки 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 има два конструктора, всеки от които извиква различните конструктори на суперкласа с помощта на 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();
    }
}
Резултатът от изпълнениетоВерижно свързване на конструктори в Java - 3

Неявно срещу явно извикване на конструктор

Java има два различни начина за извикване на конструктори: имплицитно извикване и явно извикване.
  • Явното извикване се отнася до извикване на конструктори изрично в codeа с помощта на this() or super() .
  • Неявното извикване се отнася до извикването на конструктора без аргументи на суперкласа имплицитно при липса на такова изрично извикване от конструктора на дъщерния клас. С други думи, компилаторът добавя извикването super() като първи ред на всеки от конструкторите на дъщерните класове, ако програмистът изрично не извиква super() в codeа.

Защо се нуждаем от верижно свързване на конструктор?

Има няколко различни цели за наличие на верига конструктори в Java, Howто е изброено по-долу.
  • Това е начин за достъп до свойствата на други конструктори or свойствата на родителските класове.
  • Докато се извикват други конструктори, се използва само един обект, който е текущата инстанция на класа. Инициализацията се случва на едно място, но ние имаме привилегията да извикваме различни реализации на конструктор чрез верига. Това помага значително при управлението на паметта и поддръжката на codeа.

Заключение

В този урок обсъдихме верижното свързване на конструктори в Java. Конструкторите са codeови сегменти, подобни на метод, които се извикват при създаване на обекти. Java клас може да има произволен брой конструктори с различни списъци с параметри. Верижното свързване на конструктор е удобен начин за обработка на различни инициализации с един екземпляр на клас. Някои важни точки, които трябва да се отбележат от този урок, са изброени по-долу.
  • Ако програмистът не го добави изрично към codeа, компилаторът добавя публичен конструктор без аргументи към Java класа. Това се нарича конструктор по подразбиране.
  • this() и super() трябва да бъдат написани като първия ред на конструктора.
  • this() се използва за извикване на конструктори от същия клас, докато super() се използва за извикване на конструктори от непосредствения супер клас.
  • Трябва да има поне един конструктор в класа, който не съдържа ключовата дума this() .
  • Ако не се добави изрично, компилаторът добавя извикване без аргумент super() към всеки конструктор на дъщерен клас. Това ще помогне за правилното създаване на класове.