7

我有一个抽象类和 2 个子类。有 4 个常量与所有类相关。我打算将决赛放在抽象类中,但我知道最终变量不是继承的?我是否必须在每个类中定义常量(似乎效率低下)?或者只是让常数成为一个即时变量(听起来不是一个好主意)?

我有什么方法可以解决这个问题?

4

3 回答 3

10

如果在抽象类中定义,以下内容将可用于您的所有子类。

public static final Integer MYCONSTANT = 42;

或者

static final Integer MYCONSTANT = 42;

或者

protected static final Integer MYCONSTANT = 42;

第二个(包私有)仅适用于同一包中的类。第三个(受保护的)将可用于所有子类,而不管它们的包。

于 2012-05-03T16:39:21.270 回答
3

常量由子代继承。您只需要确保拥有它们,protected否则public孩子们可以访问它们。

abstract class A {
    protected final static String FOO = "bar";
}
class B extends A {
    somemethod() {
        System.out.println("foo: " + FOO);
    }
}

可以从类及其所有子类访问。

于 2012-05-03T16:38:14.047 回答
0

是的,他们是。但是因为它们应该是恒定的,所以它应该final and static只有static modifier一个“副本”,如果它只用于子类,那么你可以使用protected,或者如果来自其他类也必须制作它public

于 2012-05-03T16:46:48.540 回答