黑马程序员技术交流社区
标题:
终于有道题可以放上来了
[打印本页]
作者:
xc29417412
时间:
2015-1-14 00:01
标题:
终于有道题可以放上来了
class Fu{
int num = 5;
Fu(){
// System.out.println(num);
show();
System.out.println(num); //为什么结果是0 5
}
不会啊
void show(){ 0
5
System.out.println("55");
}
}
class Zi extends Fu{
int num = 3;
Zi(){}
void show() {
System.out.println(num);
}
}
class Demo3 {
public static void main(String[] args) {
Zi z = new Zi();
//Zi z = (Zi)f;
//f.show();
}
}
作者:
kakasa
时间:
2015-1-14 02:19
子类创建对象前,先访问父类构造函数,这你应知道。
这里创建的是子类对象(不管引用是谁),就意味着子类的show方法已经复写掉了父类的show方法。
也就是说父类的构造函数中调用的show方法是子类的show。
这里show方法调用的是num是子类的成员num,所以父类构造函数调用show的时候子类的num还没有被初始化,只有默认初始化值也就是0。
我以为是3和5
但是从运行结果可以看得出,子类对象的成员显示初始化前,就先访问父类构造函数。
具体为什么这样我就不得而知了。
作者:
xc29417412
时间:
2015-1-15 20:52
晕死,这道题有点难度啊。考的是对内在结构的理解啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2