如何在Java中使用静态扩展变量?
我们有如下如何在Java中使用静态扩展变量?,java,static-methods,static-variables,Java,Static Methods,Static Variables,我们有如下base类: public class Base { protected static string rule = "test_1"; public static getRule(){ /* get rule value from origin class*/ } } 我们有一些从baseclass扩展而来的类。例如: public class Derived extends Base { static { rule =
base
类:
public class Base {
protected static string rule = "test_1";
public static getRule(){
/* get rule value from origin class*/
}
}
我们有一些从base
class扩展而来的类。例如:
public class Derived extends Base {
static {
rule = "test_2";
}
}
现在我们想要得到规则变量,但在某些情况下:
- 如果用户调用
,它将返回Derived.getRule()
test\u 2
- 如果在
派生的
类
规则
变量not init中,它返回
测试1
- 我不想覆盖所有子类中的
来回答这个问题getRule
我该怎么办?问题是,一旦使用了
派生的
类(初始化),基本规则
被更改,现在无论实际的类是什么,都会返回测试2
因此,该技术必须在没有静态(以该形式)的情况下完成。有一个分类的类级别值
public class Base {
private static final String BASE_RULE = "test_1";
public String getRule() {
return BASE_RULE;
}
}
public class Derived extends Base {
private static final String DERIVED_RULE = "test_2";
@Override
public String getRule() {
return DERIVED_RULE;
}
}
或者,您也可以使用标记接口,但它们不是互斥的,因此不适用于某些getCategory()
静态方法和字段不受重写的约束。如果基类中有实例方法,则可以重写它以在派生类中返回不同的内容。但是,如果您确实想直接在
派生的
类上调用派生的.getRule()
,您可以在派生的
中定义一个静态方法getRule()
。在派生的
中定义一个名为getRule()
的方法,该方法在base中隐藏getRule
。但这似乎是一个总体上不明智的设计。您可能不使用静态,它们必须在非常特定的情况下使用,请考虑您的model@azro你能举个例子吗?基本上,不要认为继承适用于静态的东西。您甚至可以创建一个完全不相关的类,创建一个从Base
获取规则的静态getter,以及一个从Base
设置规则的setter。简言之,单词extensed
在此上下文中没有任何意义,除非继承类中的规则
自动指向直接超类中的规则
,除非当前类中已经有一个规则。
public class Base implements Test1Category {
}
public class Derived extends Base implements Test2Category { ... }
if (base instanceof Test2Category) { ... }