Учитывая, что у меня есть база класса, которая имеет один конструктор аргумента с объектом Textbox в качестве аргумента. Если у меня есть класс простой из следующей формы: < /p>
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?
}
}
< /code>
Я получу ошибку, сообщая мне, что вызов Super должен быть первым вызовом в конструкторе. Однако, как ни странно, я могу сделать это. < /P>
public class Simple extends Base {
public Simple(){
super(new TextBox());
}
}
< /code>
Почему это разрешено, но первый пример не? Я могу понять, что нужно сначала настроить подкласс и, возможно, не позволить переменным объекта быть созданными до того, как будет вызван супер-конструктор. Но t - это явно переменная метода (локальная), так почему бы не разрешить это? < /P>
Есть ли способ обойти это ограничение? Есть ли хороший и безопасный способ удерживать переменные для вещей, которые вы могли бы построить, прежде чем называть супер, но после того, как вы ввели конструктор? Или, более общее, позволяя сделать вычисление до того, как на самом деле будет вызван супер, но внутри конструктора?
Подробнее здесь: https://stackoverflow.com/questions/230 ... onstructor