6 Stimmen

Java: Überschreiben einer Mitgliedsvariable verhindern

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.

9voto

Molochdaa Punkte 2128

Deklarieren Sie Ihre Variable als privat, und verwenden Sie getter .

4voto

jmj Punkte 232204

Es behalten private

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X