Una funzione utile in Java è l'opzione per dichiarare un metodo membro come finale, in modo che non possa essere sovrascritto nelle classi discendenti. C'è qualcosa di simile per le variabili membro?Java: impedisce l'override di una variabile membro
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: mi dispiace, avrei dovuto elaborare più sullo scenario: ho una variabile nella classe genitore, che dovrebbe essere aggiornato da classi figlie (quindi non deve essere privata). Tuttavia, se una classe bambino crea una variabile con lo stesso nome, si penserà di aver aggiornato la variabile genitore, anche se l'aggiornamento continuo la propria copia:
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
}
}
Questo è quello che voglio evitare.
Rendendoli privata con funzioni di accesso finali non farà il lavoro? – soulcheck