Vorausgesetzt, ich habe eine Klassenbasis, die einen einzelnen Argumentkonstruktor mit einem TextBox-Objekt als Argument hat. Wenn ich eine Klasse Simple der folgenden Form habe:
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?
}
}
Ich erhalte eine Fehlermeldung, dass der Aufruf von super der erste Aufruf in einem Konstruktor sein muss. Seltsamerweise kann ich dies jedoch tun.
public class Simple extends Base {
public Simple(){
super(new TextBox());
}
}
Warum ist dies zulässig, das erste Beispiel jedoch nicht? Ich kann verstehen, dass zuerst die Unterklasse eingerichtet werden muss und möglicherweise nicht zugelassen werden kann, dass Objektvariablen instanziiert werden, bevor der Superkonstruktor aufgerufen wird. Aber t ist eindeutig eine (lokale) Methodenvariable. Warum also nicht zulassen?
Gibt es eine Möglichkeit, diese Einschränkung zu umgehen? Gibt es eine gute und sichere Möglichkeit, Variablen für Dinge zu speichern, die Sie möglicherweise konstruieren, bevor Sie super aufrufen, aber nachdem Sie den Konstruktor eingegeben haben? Oder allgemeiner gesagt, die Berechnung kann durchgeführt werden, bevor super tatsächlich aufgerufen wird, aber innerhalb des Konstruktors?
Vielen Dank.