Здравствуйте! Сколько ни разбирался, не могу понять, что значит делегирование конструкторов в Java. Прошу помощи разобраться в этом моменте. Спасибо.
Ответ
Все просто - это когда один конструктор может быть вызван другим конструктором изнутри класса с использованием ключевого слова this и списка аргументов.
Например, есть класс Person и есть конструктор, в котором параметры имя и возраст.
class Person {
private String name;
private String age;
private String email;
public Person(String name, String age) {
this.name = name;
this.age = age;
}
}
Допустим мы хотим еще конструктор, но у которого параметры будут имя, возраст и email. Вместо того, чтобы дублировать код из первого конструктора и дописывать еще параметр, типа такого:
public Person(String name, String age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
достаточно вызвать другой конструктор с параметрами, а остальное сделать в данном:
class Person {
private String name;
private String age;
private String email;
public Person(String name, String age) {
this.name = name;
this.age = age;
}
public Person(String name, String age, String email) {
this(name, age);
this.email = email;
}
}
А вот еще захотел я конструктор добавить)) Сколько тут дубля можно избежать, можно представить.
class Person {
private String name;
private String age;
private String email;
private String sex;
public Person(String name, String age) {
this.name = name;
this.age = age;
}
public Person(String name, String age, String email) {
this(name, age);
this.email = email;
}
public Person(String name, String age, String email, String sex) {
this(name, age, email);
this.sex = sex;
}
}
Таким образом вместо захламления дублем, копипаста кода в еще один конструктор - мы даем часть обязанностей в конструктор, который уже делает подобные вещи.
Если, например, есть штук 5 конструкторов с разными и множеством параметров - не придется копипастить код везде, а лишь перенаправить некоторые вещи с одного конструктора в другой.