use*_*790 9 java overriding field super
我有这个演示代码:
class Test2 extends Test {
public int number = 0;
@Override
public void set(){
number = 1;
info();
}
@Override
public void info(){
System.out.println(number);
}
}
public class Test {
public Test(){
set();
}
public void set(){
}
public void info(){
}
public static void main(String[] args){
Test2 object = new Test2();
object.info();
}
}
Run Code Online (Sandbox Code Playgroud)
代码给出了这个输出:
1
0
Run Code Online (Sandbox Code Playgroud)
为什么?我期待这个输出:
1
1
Run Code Online (Sandbox Code Playgroud)
在我的opionion中,main函数调用Test2类的构造函数来创建一个对象.构造函数自动调用超类'构造函数.此构造函数调用被覆盖的方法set().因此调用类Test2的方法set().此方法设置字段并调用写入数字的info()方法.然后main函数再次调用创建的对象的info()方法.
正确设置数字字段,因为第一行输出为"1".但为什么第二行包含0?看来这个领域根本没有设定.你能解释一下吗?
我该怎么做才能得到我期望的行为?提前致谢!
xeh*_*puk 18
class Test2 {
public int number = 0;
}
Run Code Online (Sandbox Code Playgroud)
相当于
class Test2 {
public int number;
public Test2() {
super();
number = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,通过调用超级构造函数,该字段number设置为1.从超级构造函数返回后,将number执行0 的赋值.
只需删除该任务,它应该按预期运行.
| 归档时间: |
|
| 查看次数: |
5217 次 |
| 最近记录: |