2012-05-03 75 views
5

我有一个抽象类和2个子类。有4个常量与所有类有关。我打算把决赛放在抽象类中,但是我知道最后一个变量不会被继承吗? 我是否需要在每个类中定义常量(似乎效率低下)?或者只是让这个常量成为一个即时变量(听起来不像一个好主意)?Java-在抽象类中使用常量,需要子类使用

我能做些什么呢?

回答

10

如果在抽象类中定义了以下内容,那么您的所有子类都可以使用以下内容。

public static final Integer MYCONSTANT = 42; 

static final Integer MYCONSTANT = 42; 

protected static final Integer MYCONSTANT = 42; 

第二个(包专用)仅提供给同一个包中的类。第三个(受保护的)将可用于所有的子类,而不管它们的包是什么。

+0

我还没有尝试,但我敢肯定,第二个只适用于如果子类在同一个包。 –

+0

@AngeloNeuschitzer是的,这是正确的。 – Martin

+1

然后你应该这样写,OP似乎是初学者,可能会感到困惑。 –

2

常量由儿童继承。你只需要确保他们有protectedpublic,这样孩子们就可以访问它们。

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

可以从班级及其所有孩子进行访问。

+1

从我被告知使用受保护的是“懒惰”编程,不应该使用。 – spaz

+2

@spaz:这里我们讨论常量的可见性 - 这不是真正的继承。你也可以创建一个'Constants'类,到目前为止我已经在我的所有项目中看到过它。顺便说一句:调用'保护'能见度'懒'是可疑的......这一切都取决于你的需求。 – home

+0

@spaz取决于上下文。对于一个“最终”变量来说,它应该可以被自己的班级和孩子们使用,这是做事的最佳方式。所以...对于真实...为什么应该是'懒惰'编程呢?而应该用什么来代替? –

0

是的,他们是。但因为它们是不变的,所以它应该是final and static, static modifier使它只有一个'复制',如果这将只用于子类,那么你可以使用protected或者如果来自其他类也必须使它public