Пользователь alexnjc
alexnjc
31 уровень

Вызов конструктора из конструктора

Статья из группы Архив info.javarush.ru
Часто для того, чтобы избежать написание повторяющегося кода инициализации, необходимо вызвать код одного конструктора из другого.
Вызов конструктора из конструктора - 1
Вот пример, как это можно делать:

public class SomeClass {
  int a;
  int b;
  int c;
  
public SomeClass(int a, int b){
   this.a = a;
   this.b = b;
  }

public SomeClass(int a, int b, int c){
    // Вызов конструктора с двумя параметрами.
    this(a, b);
    this.c = c; 
  }

public void show(){
    System.out.println("a = " + a);
    System.out.println("b = " + b);
    System.out.println("c = " + c);
  }
}
Как вы видите, для этого используется ключевое слово this, после которого в круглых скобках указываем параметры для соотвествующего конструктора (с двумя параметрами в данном случае). Вы можете вызвать один конструктор из другого в том же классе, или в надклассе, со следующими ограничениями:
  • Вызываемый конструктор должен быть в первой строке кода в вызывающем конструкторе.
  • Вложенный конструктор не может иметь никакой явной или неявной ссылки на "this". Таким образом, вы не можете попасть во внутренний класс.
Комментарии (34)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Dima_Sever 14 уровень
21 апреля 2021
Казалось бы мелочь, а очень важная мелочь. Большое Вам спасибо за статью!
Dim 13 уровень, Житомир
17 марта 2021
а так можно вызвать?

this.SomeClass(a, b);
this.c=c;
?
🦔 Виктор 20 уровень, Москва Expert
18 сентября 2020
Спасибо, помогли решить задачу.
Alexandr 18 уровень, Самара
12 сентября 2020
Полезно
Andrew Petrushenkov 9 уровень, Москва
15 мая 2020
Отлично помогли, благодарю! Исправьте ошибку - "избежать (чего?) написаниЯ"
Григорий 9 уровень, Москва
23 апреля 2020
при вызове конструктора java автоматом определяет какой вызывать в зависимости от количества требуемых параметров?
Glock 13 уровень, Энгельс
13 апреля 2020
Спасибо! мне помогло, может и простая вещь это, но затык был.
RedToad 22 уровень, Казань
10 марта 2020
По моему, бесполезная статья.
Daniil Vishnivetsky 9 уровень, Stavropol
10 февраля 2020
Поделитесь видео по теме
titix 22 уровень
4 января 2020
Вложенный конструктор не может иметь никакой явной или неявной ссылки на "this". Таким образом, вы не можете попасть во внутренний класс. тоже не доходит, было бы здорово увидеть немного больше информации