黑马程序员技术交流社区
标题:
求教一个问题!!!!!
[打印本页]
作者:
李慧兵
时间:
2015-9-26 19:32
标题:
求教一个问题!!!!!
class Fu{
Fu(){
int num=10;
//调用的是子类的show方法,此时其成员变量num还未进行显示初始化
show();
//return;
}
void show(){
System.out.println("fu show");
}
}
class Zi extends Fu{
int num = 8;
Zi(){
super();
//通过super初始化父类内容时,子类的成员变量并未显示初始化,等super()父类初始化
//完毕后,才进行子类的成员变量显示初始化
}
void show(){
System.out.println("zi show..." +num);
}
}
class ExtendsDemo2{
public static void main(String[] args){
Zi z = new Zi();
z.show();
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。
为什么上面打印的第一个结果是zi show...........0??????????/
作者:
饰演自己
时间:
2015-9-26 19:57
如果在调用z.show();的话结果是:20,估计这个才是你上一步期望的结果。这个就要搞清楚继承的初始化顺序了,Zi z=new Zi();
创建Zi对象时首先调用父类的默认构造方法,父类构造方法中调用show方法,输出num值,由于多态执行的show方法为zi类的show方法打印的是子类的num值,而此时子类num值还没有完成初始化所以为默认值0;故结果为0,若子类已经完成初始化则结果为20,也就是调用z.show()的结果
作者:
dai2686779
时间:
2015-9-26 20:05
太难了看不懂。。。。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2