erweitert die Klasse mit privatem Konstruktor
Angenommen, wir haben folgenden code:
class Test {
private Test() {
System.out.println("test");
}
}
public class One extends Test {
One() {
System.out.println("One");
}
public static void main(String args[]) {
new One();
}
}
Wenn wir ein Objekt erstellen One
die ursprünglich genannt wurde die übergeordneten Konstruktor der Klasse Test()
. aber wie Test()
war privat, wir erhalten eine Fehlermeldung.
Wie viel ist ein gutes Beispiel und einen Weg aus dieser situation?
InformationsquelleAutor der Frage user471011 | 2010-10-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keinen Ausweg. Erstellen Sie eine verfügbare (
protected
public
oder Standard) super-Konstruktor in der Lage sein zu verlängerntest
.Diese Art der notation ist in der Regel in utility-Klassen oder singletons, wo Sie nicht möchten, dass die Benutzer erstellen sich selbst eine Instanz der Klasse sein, entweder durch Auseinanderziehen und instanciating der Unterklasse, oder einfach durch Aufruf eines Konstruktors der Klasse.
Wenn Sie eine
class
mit nurprivate
Konstruktoren, Sie können auch ändern, dieclass
zufinal
da es nicht erweitert werden kann überhaupt.Andere Lösung wäre, eine Methode in
test
das erstellen von Instanzentest
und delegieren jedem Methodenaufruf ausOne
zu einemtest
Instanz. Auf diese Weise müssen Sie nicht haben, um verlängerntest
.InformationsquelleAutor der Antwort Colin Hebert
Machen den Konstruktor von
test
nichtprivate
oder verschiebenOne
intest
.BTW, dein Beispiel-code enthält ein paar Fragen:
Test
statttest
)One
's Konstruktorprivate
es sei denn, es wird aufgerufen, aus einer anderen Klasse in demselben PaketInformationsquelleAutor der Antwort Mot
Eigentlich fand ich es einen Ausweg. Wie diese:
Nun, die Sie verwenden können, getChild() Instanz der erweiterten Klasse.
InformationsquelleAutor der Antwort delphifirst