Учитывая, что у меня есть класс 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, но в конструкторе?
Спасибо.