如何使子类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.你知道吗?
答案 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
并不是一个好主意。