Java:防止覆盖成员变量

标签 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!
}

编辑:抱歉,我应该详细说明这个场景:我在父类中有一个变量,应该由子类更新(因此它不能是私有(private)的)。但是,如果子类创建了一个同名变量,它会认为它已经更新了父变量,即使它更新了自己的副本:

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

这就是我要防止的。

最佳答案

将您的变量声明为私有(private),并使用 getter 。

关于Java:防止覆盖成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8137055/

相关文章:

java - 不能在 OnClickListener 上抛出 IOException

c# - 难道真的不能垂头丧气吗?它对我来说很好用

c# - 不知道类型时如何指定类型化变量

涉及静态方法的php抽象类和接口(interface)?

python - 如何防止多次捕获异常

java - JFileChooser.getTypeDescription(File f) 的值来自哪里

java - Lombok 生成器不工作

ios - 创建 MVC 的 Model 类的最佳实践

java - 当包含 "-"时,Maven 无法识别参数

java - 使用 Java 查找给定上一季度结束日期的下一个季度结束日期