Java中的一个有用功能是将成员方法声明为final的选项,以便它不能在后代类中重写。成员变量有类似的东西吗?
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!
}
编辑:抱歉,我应该详细说明这个场景:我在父类中有一个变量,应该由子类更新(因此它不能是私有的)。但是,如果子类创建一个具有相同名称的变量,它会认为它已更新了父变量,即使它更新了自己的副本:
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
}
}
这是我想要阻止的。
答案 0 :(得分:9)
将您的变量声明为private,并使用getter。
答案 1 :(得分:4)
保持private