Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-在子类也需要使用的抽象类中使用常量_Java_Constants_Abstract_Final - Fatal编程技术网

Java-在子类也需要使用的抽象类中使用常量

Java-在子类也需要使用的抽象类中使用常量,java,constants,abstract,final,Java,Constants,Abstract,Final,我有一个抽象类和两个子类。有4个常量与所有类相关。我本来打算把期末考试放在抽象类中,但我知道最终的变量不是继承的? 我是否必须在每个类中定义常量(似乎效率低下)?或者干脆把常数变成一个即时变量(听起来不是个好主意) 有什么方法可以做到这一点呢?常量由孩子们继承。您只需确保它们受到保护或公开,以便孩子们可以访问它们 abstract class A { protected final static String FOO = "bar"; } class B extends A {

我有一个抽象类和两个子类。有4个常量与所有类相关。我本来打算把期末考试放在抽象类中,但我知道最终的变量不是继承的? 我是否必须在每个类中定义常量(似乎效率低下)?或者干脆把常数变成一个即时变量(听起来不是个好主意)


有什么方法可以做到这一点呢?

常量由孩子们继承。您只需确保它们受到
保护
公开
,以便孩子们可以访问它们

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

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

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

public static final Integer MYCONSTANT = 42;


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

是的,它们是。但是因为它们是常量,所以应该是
最终的和静态的
静态修饰符
使它只有一个“副本”,如果这只用于子类中,那么你可以使用
受保护的
,或者如果来自其他类,那么必须将它公开,

,我被告知使用受保护的是“懒惰的”编程,不应使用。@spaz:这里我们讨论常量的可见性-这不是真正的继承。您还可以创建一个
Constants
类,到目前为止,我在所有项目中都看到了它。顺便说一句:将“受保护的”可见性称为“懒惰”是有问题的。。。这完全取决于你的需要。@spaz,这取决于上下文。对于一个
final
变量,它应该可以被它自己的类和它的子类访问,这是做事情的完美方式。所以来真的无论如何,为什么bit应该是“懒惰”编程呢?那么应该用什么来代替呢?@home是的,但是如果你的常量
只不过是在常量上打洞,那么最好把它变成一个
接口
(是的,常量接口很棒!)常量类或接口通常是反模式的。常量属于它们的上下文,在本例中是基类。我没有尝试过,但我确信只有当子类在同一个包中时,第二个才有效。然后你应该这样写,OP似乎是初学者,可能会混淆。
static final Integer MYCONSTANT = 42;
protected static final Integer MYCONSTANT = 42;