我有一个抽象类,只有一个具体的方法。在这个方法中,我想使用派生自声明方法的类的静态类变量。为此,我当然必须在抽象类中声明这个静态变量。
调用该方法时,变量将解析为抽象基类中的变量,而不是派生类中的变量。我是否需要使用属性装饰派生类'属性?
我是在尝试做一些Java不支持的事情,还是我错过了什么?
答案 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的方法。