如何在不修改主类的情况下更改主类中声明的最终静态int值?

时间:2013-05-12 20:02:32

标签: java

如何使子类int值超越主类中的最终静态int值? 示例: 我的主要班级有

public class main {

final static int num = 2;
....
....
System.out.println(num);
}

我的子类在主类中调用。

Public class subclass {
....  -> How can I define the int num = 10 in the subclass without changing the main class code
...
}

该交易不是触及主类,即我不能将其更改为最终静态int num = 10; 但我必须将10分配给num.你知道吗?

4 个答案:

答案 0 :(得分:1)

简单的答案是你无法真正做到这一点。

答案很长,您可以使用反射更改此值,但javac编译器可以自由内联此值,因此您不会更改使用此值的任何位置。

例如,在编译之后,这可能会转换为

System.out.println(2);

因此,即使您更改num,仍会打印2。

答案 1 :(得分:1)

您无法更改最终变量的值。

您可以在子类中定义具有相同名称的变量,但由于您在讨论静态变量,因此父/子类实际上没有任何意义。继承仅适用于对象,而不适用于类/静态成员。

public class SubClass extends main {
    final static int num = 10;
}

正如我早些时候所说的,静态场没有继承,因此没有超越。这样做的结果是,如果你直接引用这个类,num只有10个。

System.out.println(main.num);
System.out.println(SubClass.num);

main parent = new main();
main child = new SubClass();
System.out.println(parent.num);
System.out.println(child.num);

输出:

2
10
2
2

答案 2 :(得分:0)

是的,你可以但在此之前你必须extend所有超类子类的行为:

Public class subclass extends main{
private int num ;
//.....
// you can access superclass's static instance fields :
this.num =  main.num;

}

请注意,由于变量num是静态的,您可以通过 Class 名称调用它。 你也可以通过super.num来调用它,但变量必须是静态的,因为静态vairabes属于不属于对象的类。

public class main {

final int num = 2;
//....
//....
System.out.println(num);
}
    Public class subclass extends main{
        private int num ;
        //.....
        // you can access superclass's static instance fields :
        this.num =  super.num;

        }

答案 3 :(得分:0)

您可以在子类中重新声明它:

public class subclass extends main{

    static final int num = 10;
}

理想情况下,应使用className.propertyName调用静态成员,因此,如果重新声明子类中的静态属性,则无关紧要。

注意:
保持班级名称main并不是一个好主意。