【发布时间】:2015-11-21 11:58:30
【问题描述】:
我有这样的课:
public abstract class A {
public static final int FIELD;
// some methods
}
我想在子类中初始化变量 FIELD。 我的意思是这样的:
public class B extends A {
FIELD = 5;
}
编辑 实际上我有多个扩展 A 的类,它们都有变量 FIELD 但具有不同的值;所以我发现的方法是重构变量 FIELD 并在超类中声明它。还有其他解决方案吗? 有可能有这样的东西吗? 谢谢你的帮助。
【问题讨论】:
-
您为什么要这样做?为什么不在 B 类中定义变量呢?您是否意识到静态值只有一个实例?
-
看看this
-
实际上我有多个扩展 A 的类,它们都有变量 FIELD 但具有不同的值;所以我发现的方法是重构变量 FIELD 并在超类中声明它。还有其他解决方案吗?
-
每个子类都不会拥有自己的静态字段副本。它由整个 jvm 中运行的所有东西共享(假设没有花哨的类加载器)。静态字段/方法不是多态性的一部分。
-
谢谢@LanceJava。这是我没有注意的一个重点。那么对于这个问题,我应该为A的所有子类声明变量FIELD吗?
标签: java variables static subclass final