Враховуючи те, що у мене є клас 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, але всередині конструктора?
Дякую.