java - 您如何确保继承的静态字段始终从子类而不是基类获取其值?

标签 java inheritance static

我试图将 hello 方法放在基类 A 中,我希望它显示 x 的值,即在子类中设置。

hello 方法永远不会被 A 的实例调用 - 此类是纯基类,永远不会实例化。

x 变量是一个分类器,用于标记从何处调用 hello 方法(该值实际上保存到数据库中);

如果在子类中调用hello,如何保证x的值是子类中设置的值?

public class A{

  protected static String x = "A";

  public void hello(){
    System.out.println(x);
  }
}

public class B extends A{

  protected static String x = "B";

  //...
  hello();
}

public class C extends A{

  protected static String x = "C";

  //...
  hello();
}

最佳答案

你不能。您正试图从字段中获取多态行为,但它们根本就没有多态行为。 hello() 中的 x 在编译时绑定(bind)到 A 中的字段。

如果你想要多态行为,你需要引入一个非最终(可能是抽象的)方法并在每个子类中覆盖它。然后 hello() 可以调用这个方法,多态性将确保调用正确的覆盖。当然,hello() 不能是 static 方法,因为多态性也不适用于静态方法...方法调用的目标(您的对象调用它)将决定使用的实现。

关于java - 您如何确保继承的静态字段始终从子类而不是基类获取其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7148575/

相关文章:

c# - 垃圾收集会影响堆栈吗?

java - 运行executeQuery(sql)时出现NullPointerException

c++ - 非虚拟成员的虚拟和继承成本?

java - 为什么抽象类允许在其中定义具体方法

javascript - JS 通过绑定(bind)传递参数到对象内部函数以访问对象范围内的特定变量的最佳实践

delphi - 使用项目中的波形文件

java - Android 中的大型公共(public)静态变量

java - 如何用新加密的数据更新部分加密的数据?

java - Hibernate 中的弱实体映射

static - 为什么在同一范围内可以有多个具有静态生命周期的可变引用