User 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". Таким образом, вы не можете попасть во внутренний класс.
Комментарии (35)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Dima_Sever Уровень 18
21 апреля 2021
Казалось бы мелочь, а очень важная мелочь. Большое Вам спасибо за статью!
Dim Уровень 16, Житомир, Украина
17 марта 2021
а так можно вызвать?

this.SomeClass(a, b);
this.c=c;
?
🦔 Виктор Уровень 20, Москва, Россия Expert
18 сентября 2020
Спасибо, помогли решить задачу.
Alexandr Уровень 19, Самара, Россия
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". Таким образом, вы не можете попасть во внутренний класс. тоже не доходит, было бы здорово увидеть немного больше информации