In einem Java-Programm habe ich mehrere Unterklassen erben von einem Elternteil (das ist abstrakt). Ich wollte ausdrücken, dass jedes Kind ein einmal gesetztes Mitglied haben sollte (was ich vom Konstrukteur vorhatte). Mein Plan war es, Code zu schreiben. wie folgt:Warum kann ich in Java kein endgültiges Element (ohne Initialisierung) in der übergeordneten Klasse deklarieren und seinen Wert in der Unterklasse festlegen? Wie kann ich umgehen?
public abstract class Parent {
protected final String birthmark;
}
public class Child extends Parent {
public Child(String s) {
this.birthmark = s;
}
}
Allerdings scheint dies nicht die Java-Götter zu gefallen. In der Elternklasse bekomme ich die Nachricht, dass birthmark
"möglicherweise nicht initialisiert wurde", in der Kindklasse bekomme ich "Das letzte Feld birthmark
kann nicht zugegriffen werden".
Also, was ist der Java-Weg dafür? Was vermisse ich?
Keine direkte Antwort, aber im Klassenformat können finale Instanzfelder nur von derselben Klassendatei gesetzt werden, aber nicht unbedingt im Konstruktor. IIRC. –
Verwandte Frage: http://stackoverflow.com/questions/14383276/initialize-member-of-abstract-class-without-subclasses-having-write-access – user905686