黑马程序员技术交流社区
标题:
这段代码结果和我想的相差很大,求解
[打印本页]
作者:
sq_jun
时间:
2015-1-28 01:43
标题:
这段代码结果和我想的相差很大,求解
class Fu{
int num = 5;
Fu(){
System.out.println(num);
show(); //55
System.out.println(num); //5
}
void show(){
System.out.println("55");
}
}
class Zi extends Fu{
int num = 3;
Zi(){
}
void show() {
System.out.println(num);
}
}
public class Demo {
public static void main(String[] args) {
Zi z = new Zi();
}
}
复制代码
作者:
邓士林
时间:
2015-1-28 09:05
确实有点不同,这是由JVM造成的,这段代码在CLR编译出来就是5 55 5,JVM就是5 0 5;
为了测试,我们把子类改成:
class Zi extends Fu{
int num = 3;
Zi(){
}
void show() {
System.out.println("num");
}
复制代码
发现输出结果:
---------- 运行 ----------
5
num
5
输出完成 (耗时 0 秒) - 正常终止
这说明调用show方法时子类的,而CLR是调用父类的show。这也算一个知识点吧!由于在建立子类的时候,num还没有值,所以会是0
作者:
d342784178
时间:
2015-1-28 09:18
(推测)
你在父类的构造方法中调用子类重写的方法
这时子类才进行了声明和jvm默认初始化 并没有进行赋值操作(把3赋给num)
你可以把int改成String试试 结果就成了null
这是我根据结果的推测
作者:
麦兜de篼
时间:
2015-1-28 09:44
你想的结果是什么?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2