Учитывая, что у меня есть класс 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?
}
}
Я получаю сообщение об ошибке, указывающее, что вызов супер должен быть первым вызовом в конструкторе. Однако, как ни странно, я могу это сделать.
public class Simple extends Base {
public Simple(){
super(new TextBox());
}
}
Почему это разрешено, но первый пример - нет? Я могу понять, что нужно сначала настроить подкласс и, возможно, не позволить создавать объектные переменные до вызова суперконструктора. Но t - явно метод (локальная) переменная, так почему бы не позволить это?
Есть ли способ обойти это ограничение? Есть ли хороший и безопасный способ держать переменные в вещах, которые вы могли бы создать, прежде чем звонить супер, но ПОСЛЕ того, как вы вошли в конструктор? Или, в более общем плане, позволяя выполнить вычисление до того, как супер действительно вызывается, но внутри конструктора?
Спасибо.