Java:阻止覆盖成员变量

时间:2011-11-15 13:28:07

标签: java oop

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
    }
}

这是我想要阻止的。

2 个答案:

答案 0 :(得分:9)

将您的变量声明为private,并使用getter。

答案 1 :(得分:4)

保持private