如何在派生类中重新定义常量变量? [JAVA]

时间:2015-03-17 18:32:47

标签: java oop constants derived-class

说我有一个班级

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中定义了。

4 个答案:

答案 0 :(得分:3)

你做不到。静态属于类而非实例。

但是要制作一个技巧,您可以使用相同的名称创建另一个常量。 您可以使用

访问该常量

A.x或B.x

class B extends A {
  public static final x = 2;
}

在此示例A.x=1B.x=2

或者如果你想按照你的要求重新定义,你可以做到这一点,但这是毫无意义的

class B extends A{
  static{
    x=2;// assuming 'x' not final
  }
}

在此示例A.x=2B.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();
  }
}