Вызов конструктора из другого конструктора в Java — this() с примерами

В Java один конструктор класса может вызывать другой конструктор того же класса с помощью ключевого слова this. Это позволяет не дублировать одинаковую логику инициализации в нескольких конструкторах.

Пример 1: программа для вызова одного конструктора из другого

class Main {

  int sum;

  // first constructor
  Main() {
    // calling the second constructor
    this(5, 2);
  }

  // second constructor
  Main(int arg1, int arg2) {
    // add two value
    this.sum = arg1 + arg2;
  }

  void display() {
    System.out.println("Sum is: " + sum);
  }

  // main class
  public static void main(String[] args) {

    // call the first constructor
    Main obj = new Main();

    // call display method
    obj.display();
  }
}

Вывод:

Sum is: 7

В примере выше мы создали класс Main и определили в нём два конструктора:

Main() {..}

Main(int arg1, int arg2) {...}

Внутри первого конструктора мы используем ключевое слово this для вызова второго конструктора:

this(5, 2);

Здесь второй конструктор вызывается из первого с аргументами 5 и 2.

Важно

Строка внутри конструктора, которая вызывает другой конструктор, должна быть первой строкой конструктора. То есть this(5, 2) обязано стоять самой первой строкой в теле Main().

Пример 2: вызов конструктора суперкласса из конструктора дочернего класса

Можно также вызвать конструктор суперкласса из конструктора дочернего класса с помощью super().

// superclass
class Languages {

  // constructor of the superclass
  Languages(int version1, int version2) {

    if (version1 > version2) {
      System.out.println("The latest version is: " + version1);
    }

    else {
      System.out.println("The latest version is: " + version2);
    }

  }
}

// child class
class Main extends Languages {

  // constructor of the child class
  Main() {
    // calling the constructor of super class
    super(11, 8);
  }

  // main method
  public static void main(String[] args) {

    // call the first constructor
    Main obj = new Main();

  }
}

Вывод:

The latest version is: 11

В этом примере мы создали суперкласс Languages и наследника — класс Main. Внутри конструктора Main есть строка:

super(11, 8);

Здесь мы вызываем конструктор суперкласса (то есть Languages(int version1, int version2)) из конструктора подкласса (Main()).