Рубрики

Цепочка конструктора в Java с примерами

Обязательное условие — Конструкторы в Java
Цепочка конструктора — это процесс вызова одного конструктора из другого конструктора относительно текущего объекта.
Цепочка конструктора может быть выполнена двумя способами:

  • Внутри того же класса : это можно сделать с помощью ключевого слова this () для конструкторов в одном классе
  • Из базового класса: с помощью ключевого слова super () для вызова конструктора из базового класса.

Цепочка конструктора происходит через наследование . Задача конструктора подкласса — сначала вызвать конструктор суперкласса. Это гарантирует, что создание объекта подкласса начинается с инициализации членов данных суперкласса. В цепочке наследования может быть любое количество классов. Каждый конструктор вызывает цепочку, пока не будет достигнут класс наверху.

Зачем нам цепочка конструкторов?
Этот процесс используется, когда мы хотим выполнить несколько задач в одном конструкторе, вместо того, чтобы создавать код для каждой задачи в одном конструкторе, мы создаем отдельный конструктор для каждой задачи и делаем их цепочку, которая делает программу более читабельной.

Цепочка конструктора в том же классе, используя ключевое слово this ():

// Java-программа для иллюстрации цепочки конструктора
// внутри того же класса, используя ключевое слово this ()

class Temp

{

    // конструктор по умолчанию 1

    // конструктор по умолчанию вызовет другой конструктор

    // используя это ключевое слово из того же класса

    Temp()

    {

        // вызывает конструктор 2

        this(5);

        System.out.println("The Default constructor");

    }

  

    // параметризованный конструктор 2

    Temp(int x)

    {

        // вызывает конструктор 3

        this(5, 15);

        System.out.println(x);

    }

  

    // параметризованный конструктор 3

    Temp(int x, int y)

    {

        System.out.println(x * y);

    }

  

    public static void main(String args[])

    {

        // сначала вызывает конструктор по умолчанию

        new Temp();

    }

}

Выход:

75
5
The Default constructor

Правила построения конструктора:

  1. Выражение this () всегда должно быть первой строкой конструктора.
  2. Должен быть хотя бы один конструктор без ключевого слова this () (конструктор 3 в примере выше).
  3. Цепочка конструктора может быть достигнута в любом порядке.

Что произойдет, если мы изменим порядок конструкторов?

Ничего, конструктор цепочки может быть достигнут в любом порядке

// Java-программа для иллюстрации цепочки конструктора
// внутри того же класса, используя ключевое слово this ()
// и меняем порядок конструкторов

class Temp

{

    // конструктор по умолчанию 1

    Temp()

    {

        System.out.println("default");

    }

  

    // параметризованный конструктор 2

    Temp(int x)

    {

        // вызывает конструктор по умолчанию

        this();

        System.out.println(x);

    }

  

    // параметризованный конструктор 3

    Temp(int x, int y)

    {

        // вызывает параметризованный конструктор 2

        this(5);

        System.out.println(x * y);

    }

  

    public static void main(String args[])

    {

        // вызывает параметризованный конструктор 3

        new Temp(8, 10);

    }

}

Выход:

default
5
80

ПРИМЕЧАНИЕ. В примере 1 конструктор по умолчанию вызывается в конце, но в примере 2 конструктор по умолчанию вызывается сначала. Следовательно, порядок в цепочке конструктора не важен.

Конструктор Цепочка с другим классом с помощью ключевого слова super ():

// Java-программа для иллюстрации цепочки конструктора
// другой класс, использующий ключевое слово super ()

class Base

{

    String name;

  

    // конструктор 1

    Base()

    {

        this("");

        System.out.println("No-argument constructor of"

                                           " base class");

    }

  

    // конструктор 2

    Base(String name)

    {

        this.name = name;

        System.out.println("Calling parameterized constructor" 

                                              + " of base");

    }

}

  

class Derived extends Base

{

    // конструктор 3

    Derived()

    {

        System.out.println("No-argument constructor "

                           "of derived");

    }

  

    // параметризованный конструктор 4

    Derived(String name)

    {

        // вызывает конструктор базового класса 2

        super(name);

        System.out.println("Calling parameterized "

                           "constructor of derived");

    }

  

    public static void main(String args[])

    {

        // вызывает параметризованный конструктор 4

        Derived obj = new Derived("test");

  

        // Вызывает конструктор без аргументов

        // Derived obj = new Derived ();

    }

}

Выход:

Calling parameterized constructor of base
Calling parameterized constructor of derived

Примечание: Подобно цепочке конструктора в том же классе, super () должна быть первой строкой конструктора, так как конструктор суперкласса вызывается перед конструктором подкласса.

Альтернативный метод: использование блока Init :
Когда мы хотим, чтобы определенные общие ресурсы выполнялись с каждым конструктором, мы можем поместить код в блок init . Блок Init всегда выполняется перед любым конструктором, всякий раз, когда конструктор используется для создания нового объекта.

Пример 1:

class Temp

{

    // блок, который будет выполнен перед любым конструктором.

    {

        System.out.println("init block");

    }

  

    // конструктор без аргументов

    Temp()

    {

        System.out.println("default");

    }

  

    // конструктор с одним аргументом.

    Temp(int x)

    {

        System.out.println(x);

    }

  

    public static void main(String[] args)

    {

        // Создание объекта путем вызова без аргумента

        // конструктор.

        new Temp();

  

        // Создание объекта путем вызова параметризованного

        // конструктор с одним параметром.

        new Temp(10);

    }

}

Выход:

init block
default
init block
10

ПРИМЕЧАНИЕ. Если имеется более одного блока, они выполняются в том порядке, в котором они определены в одном и том же классе. Смотрите экс.
Пример :

class Temp

{

    // блок, который будет выполнен первым

    {

        System.out.println("init");

    }

    Temp()

    {

        System.out.println("default");

    }

    Temp(int x)

    {

        System.out.println(x);

    }

  

    // блок, который будет выполнен после первого блока

    // который был определен выше.

    {

        System.out.println("second");

    }

    public static void main(String args[])

    {

        new Temp();

        new Temp(10);

    }

}

Выход :

init
second
default
init
second
10

Эта статья предоставлена Апурвой Сингхом . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Цепочка конструктора в Java с примерами

0.00 (0%) 0 votes