说我有一个班级
class A {
public static final int x = 1;
}
我有一个派生类
class B extends A {
x = 2; // want to redefine x as 2 here
}
如何在派生类B中将常量重新定义为2?我记得在使用C ++时有一个构造函数“技巧”,但我对Java中的操作感到迷茫。我甚至尝试从A类中的变量声明中删除“final”,但是B类甚至不知道X已定义。它说我需要在B类的x前面添加“public static final int”,但我认为它已经在A中定义了。
答案 0 :(得分:3)
你做不到。静态属于类而非实例。
但是要制作一个技巧,您可以使用相同的名称创建另一个常量。 您可以使用
访问该常量class B extends A {
public static final x = 2;
}
在此示例A.x=1
和B.x=2
或者如果你想按照你的要求重新定义,你可以做到这一点,但这是毫无意义的
class B extends A{
static{
x=2;// assuming 'x' not final
}
}
在此示例A.x=2
和B.x=2
答案 1 :(得分:2)
这是不可能的。 public static final int 是编译时常量,无法重新初始化。
答案 2 :(得分:0)
如果您删除了final关键字,可以在B的构造函数中指定x,如下所示:
class B extends A {
public B(){
A.x = 2;
}
}
答案 3 :(得分:0)
最终的结果是,没有人能够改变它。
如果您只想使用static,那么这是一个示例代码:
class Test2{
public static int a=0; // if you use final here the code will not compile
}
class B extends Test2{
//a = 1000; - this requires a datatype
public void setA(){
a=1000;
System.out.println(a);
}
}
class C{
public static void main(String args[]){
B objB = new B();
objB.setA();
}
}