Учитывая, что у меня есть класс Base, у которого есть конструктор с одним аргументом с объектом TextBox в качестве аргумента. Если у меня есть класс Simple следующей формы:
public class Simple extends Base {
public Simple(){
TextBox t = new TextBox();
super(t);
//wouldn't it be nice if I could do things with t down here?
}
}
Я получу сообщение о том, что вызов super должен быть первым вызовом в конструкторе. Однако, как ни странно, я могу это сделать.
public class Simple extends Base {
public Simple(){
super(new TextBox());
}
}
Почему это разрешено, а первый пример - нет? Я понимаю, что нужно сначала настроить подкласс и, возможно, не допустить создания экземпляров переменных объекта перед вызовом супер-конструктора. Но t - это явно метод (локальная) переменная, так почему бы не разрешить это?
Есть ли способ обойти это ограничение? Есть ли хороший и безопасный способ хранения переменных для вещей, которые вы могли бы создать ДО вызова super, но ПОСЛЕ того, как вы ввели конструктор? Или, в более общем смысле, допускается выполнение вычислений до того, как супер будет вызван super, но внутри конструктора?
Спасибо.