【发布时间】:2012-05-03 16:36:41
【问题描述】:
我有一个抽象类和 2 个子类。有 4 个常量与所有类相关。我打算将决赛放在抽象类中,但我知道最终变量不是继承的? 我是否必须在每个类中定义常量(似乎效率低下)?或者只是让常量成为一个即时变量(听起来不是个好主意)?
我有什么方法可以解决这个问题?
【问题讨论】:
标签: java constants abstract final
我有一个抽象类和 2 个子类。有 4 个常量与所有类相关。我打算将决赛放在抽象类中,但我知道最终变量不是继承的? 我是否必须在每个类中定义常量(似乎效率低下)?或者只是让常量成为一个即时变量(听起来不是个好主意)?
我有什么方法可以解决这个问题?
【问题讨论】:
标签: java constants abstract final
如果在抽象类中定义以下内容,您的所有子类都可以使用。
public static final Integer MYCONSTANT = 42;
或
static final Integer MYCONSTANT = 42;
或
protected static final Integer MYCONSTANT = 42;
第二个(包私有)仅适用于同一包中的类。第三个(受保护的)将可供所有子类使用,无论它们的包如何。
【讨论】:
常量由子代继承。您只需确保拥有它们 protected 或 public 以便孩子们可以访问它们。
abstract class A {
protected final static String FOO = "bar";
}
class B extends A {
somemethod() {
System.out.println("foo: " + FOO);
}
}
可以从类及其所有子类中访问。
【讨论】:
Constants 类,到目前为止,我在所有项目中都看到了它。顺便说一句:将“受保护的”可见性称为“懒惰”是有问题的……这完全取决于您的需求。
final 变量,它应该可以被它自己的类和它的孩子访问,这是做事的完美方式。所以......真的......为什么要'懒惰'编程呢?应该改用什么?
class 只是将常量放在里面,那么将其设置为 interface 会更好(是的,常量接口很棒!)跨度>
是的。但是由于它们是恒定的,因此应该是 final and static , static modifier 使其只有一个“副本”,如果仅在子类中使用,则您可以使用 protected 或者如果来自其他类也必须做到public。
【讨论】: