Секреты Java: post #586 — TG.ME

Вызов конструктора из другого конструктора После одного из тестов были вопросы по поводу вызова одного конструктора из другого. Давайте пройдемся по этой теме. Для чего нам вообще вызывать один конструктор из другого? Это позволяет нам избежать дублирования кода, когда несколько конструкторов имеют общую инициализацию. При вызове одного конструктора из другого используется ключевое слово this и за ним следует список аргументов, передаваемых в вызываемый конструктор. Вы можете использовать вызов только одного конструктора и это должно быть первым оператором в теле вашего конструктора! Рассмотрим пример: public class MyClass { private int x; // Конструктор по умолчанию public MyClass() { this(0); // Вызов конструктора с одним аргументом } // Конструктор с одним аргументом public MyClass(int x) { this.x = x; //может быть еще какая-то логика } } В примере выше MyClass имеет два конструктора: 1. Конструктор по умолчанию вызывает конструктор с одним аргументом, передавая ему значение по умолчанию. 2. Конструктор с одним аргументом инициализирует поле класса значением, переданным в аргументе. Если у нас есть дочерний класс: class ChildClass extends MyClass { public ChildClass() { super(1); } } Мы точно так же можем вызвать конструктор родительского класса, но с помощью ключевого слова super. Правила все те же, что и для ключевого слова this! Обратите внимание, что можно записать и таким образом: class ChildClass extends MyClass { public ChildClass() { } } Тогда неявно вызовется конструктор родительского класса по умолчанию. Помните правило - конструктор родительского класса вызывается всегда! Если его не вызвали вы явно, его вызовет компилятор (при наличии конструктора по умолчанию родительского класса) или он же сообщит, что нужно вызвать явно (при отсутствии конструктора по умолчанию родительского класса).

👍5😱3❤2✍1⚡1🔥1👏1
November 19, 2024 2.6K 15