Вызов конструктора из другого конструктора в 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()).