我可以从抽象超类上的方法访问子类上定义的静态成员变量吗?

时间:2010-08-18 15:06:13

标签: java inheritance abstract

我有一个抽象类,只有一个具体的方法。在这个方法中,我想使用派生自声明方法的类的静态类变量。为此,我当然必须在抽象类中声明这个静态变量。

调用该方法时,变量将解析为抽象基类中的变量,而不是派生类中的变量。我是否需要使用属性装饰派生类'属性?

我是在尝试做一些Java不支持的事情,还是我错过了什么?

3 个答案:

答案 0 :(得分:12)

你正在尝试做一些不受支持的事情。字段不能被“覆盖” - 静态成员不会多态化。

相反,创建可以在派生类中实现的抽象属性。即使它们返回静态变量,它们也必须是实例属性。

答案 1 :(得分:2)

您不能覆盖变量,只能覆盖方法。如果子类可能需要提供不同的值,请将getter方法添加到执行该操作的类中。

abstract class Foo {
  static private final String someValue = "blah";

  String getSomeValue() {
    return someValue;
  }

  public abstract void someMethod();
}

class Bar extends Foo {
  String getSomeValue() {
    return "somethingElse";
  }

  public void someMethod() {
    String x = getSomeValue();
  }
}

答案 2 :(得分:0)

根据您的目的,您可以执行以下操作:

    Base b = new Sub();
    System.out.println(b.myInt); // will print myInt from Base

    Sub s = new Sub();
    System.out.println(s.myInt); // will print myInt from Sub

,但你可能想要Jon的方法。