-1

如何使子类 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
...
}

交易是不要触及主类,即我不能将其更改为 final static int num = 10; 但我必须将 10 分配给 num。你知道吗?

4

4 回答 4

1

简单的答案是你不能真正做到这一点。

长答案是您可以通过反射更改此值,但是javac编译器可以自由内联此值,因此您不会更改任何使用它的地方。

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

System.out.println(2);

所以即使你改变num了,这仍然会打印 2。

于 2013-05-12T20:11:37.487 回答
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
于 2013-05-12T20:12:09.990 回答
0

是的,你可以,但在任何事情之前,你必须对它的 子类extend所有superclass的行为:

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

}

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

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;

        }
于 2013-05-12T20:10:51.923 回答
0

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

public class subclass extends main{

    static final int num = 10;
}

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

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

于 2013-05-12T20:11:04.817 回答