Eine nützliche Funktion in Java ist die Möglichkeit, eine Member-Methode als final zu deklarieren, so dass sie in den Nachfolgeklassen nicht überschrieben werden kann. Gibt es etwas Ähnliches für Mitgliedsvariablen?
class Parent {
public final void thisMethodMustRemainAsItIs() { /* ... */ }
public String thisVariableMustNotBeHidden;
}
class Child extends Parent {
public final void thisMethodMustRemainAsItIs() { /* ... */ } // Causes an error
public String thisVariableMustNotBeHidden; // Causes no error!
}
EDIT: Entschuldigung, ich sollte das Szenario näher erläutern: Ich habe eine Variable in der übergeordneten Klasse, die von untergeordneten Klassen aktualisiert werden soll (daher darf sie nicht privat sein). Wenn jedoch eine untergeordnete Klasse eine Variable mit demselben Namen erstellt, wird sie DENKEN, dass sie die übergeordnete Variable aktualisiert hat, obwohl sie ihre eigene Kopie aktualisiert hat:
class Parent {
protected String myDatabase = null; // Should be updated by children
public void doSomethingWithMyDatabase() { /* ... */ }
}
class GoodChild extends Parent {
public GoodChild() {
myDatabase = "123";
doSomethingWithMyDatabase();
}
}
class BadChild extends Parent {
protected String myDatabase = null; // Hides the parent variable!
public BadChild() {
myDatabase = "123"; // Updates the child and not the parent!
doSomethingWithMyDatabase(); // NullPointerException
}
}
Genau das möchte ich verhindern.