Wie wir im Konstruktorhauptteil einer Unterklasse wissen, muss der Elternkonstruktor die erste Anweisung sein, andernfalls erhalten wir einen Kompilierzeitfehler. Dieses Thema wurde bereits behandelt here.Überprüfen Sie die Bedingungen in der Unterklasse vor dem Aufruf der Superklassenkonstruktormethode
Nehmen wir an, dass den Aufruf der Mutter Konstruktor hohe Kosten der Systemressourcen verursacht, in anderen in der Unterklasse Konstruktor wir zunächst einige Bedingungen überprüfen müssen, wenn die Bedingungen erfüllt sind sind wir gut zu gehen durch die Mutter Konstruktor sonst gibt es keine Notwendigkeit, weiter zu gehen (sagen wir mal eine Ausnahme):
class parent {
parent(Object blah) {
//Heavy resource consuming tasks
}
}
class child extends parent {
child(Object blah, boolean condition) {
if (!condition) throw new IllegalArgumentException("Condition not satisfied");
super(blah); //Compile error!
}
}
Wenn jemand das gleiche Problem hatte ich neugierig bin, ist es trotzdem mit dieser Situation zu umgehen oder muss ich die Mutter Konstruktor aufrufen zuerst Egal wie viele Ressourcen es verschwendet und dann die Ausnahme auslöst?
Mögliches Duplikat von [Warum muss this() und super() die erste Anweisung in einem Konstruktor sein?] (Http://stackoverflow.com/questions/1168345/why-does-sthis-and-super- have-to-be-the-first-Anweisung-in-a-constructor) – CollinD
Legen Sie keine solche ressourcenintensive Logik in den Konstruktor. Erstellen Sie einen leichtgewichtigen Konstruktor und eine separate 'init()' Methode, um das schwere Heben durchzuführen. – azurefrog
@azurefrog so, wenn ich init() ich muss immer noch den Elternkonstruktor an erster Stelle –