首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

子父类继承的有关问题-求解释为什么运行的结果是03040

2012-05-05 
子父类继承的问题--求解释为什么运行的结果是03040package testpublic class Sub extends Super {int j

子父类继承的问题--求解释为什么运行的结果是03040
package test;
public class Sub extends Super {
int j = 30;
Sub() {
print();
j = 40;
}
void print() {
System.out.print(j);
}
public static void main(String[] args) {
System.out.print(new Sub().j);
}
}
class Super {
int i = 10;
Super() {
print();
i = 20;
}
void print() {
System.out.print(i);
}
}

[解决办法]
1楼解释有错误:

1 程序执行new Sub()时,先给变量j赋默认初值0.(而不是 j=30;)。
2 父类的print方法被子类覆写了,跳到父类的构造方法时,执行的是子类被覆写的print()方法。
3 第一个输出是把j(=0)输出了。
4 父类构造方法执行完后,回到子类,这时先给变量j显示赋值(j=30).
5 子类构造方法执行,输出30。
6 最后40好理解。

楼主可以把父类构造方法直接输出一个字符串,比如 System.out.println("Hello"); 可以看到根本不执行。


[解决办法]

探讨
引用:

1楼解释有错误:

1 程序执行new Sub()时,先给变量j赋默认初值0.(而不是 j=30;)。
2 父类的print方法被子类覆写了,跳到父类的构造方法时,执行的是子类被覆写的print()方法。
3 第一个输出是把j(=0)输出了。
4 父类构造方法执行完后,回到子类,这时先给变量j显示赋值(j=30).
5 子类构造方法执行,输出30。
6 ……

热点排行