作者: 大自然的搬运工 时间: 2015-11-12 17:38
。。。。作者: ln0491 时间: 2015-11-12 17:58
Fu
zi show 0
Zi
zi show 8
这样吧作者: z13561291 时间: 2015-11-12 20:29
在对子类对象进行初始化时,父类的构造函数也会运行,
因为子类的构造函数默认第一行有一条隐式的语句super();
所以先运行“Fu”
然后Fu方法中没有创建对象,所以num初始化为默认int类型数值为0
所以是 zi show 0
然后是子类成员变量初始化 num赋值给8
然后是运行子类的代码块 “Zi”
因为new一个Zi()已经分配空间
这时num已经被赋值给8
所以zi show 8
顺序就是
Fu
zi show 0
Zi
zi show 8作者: 孙建志 时间: 2015-11-13 21:17
楼上说的很正确作者: zhauibuzhai 时间: 2015-11-13 21:48
学习.{:2_32:}{:2_32:}{:2_32:}作者: 女神 时间: 2015-11-13 22:10
运行过程
new ZI() 找到子类的构造方法 然后看到super()调用父类的,然后找到父类的构造方法,先运行的代码是 int num = 9 然后是构造代码块 打印一个fu 然后开始运行父类的构造方法, 看到需要调用show() 然后去子类找show方法,因为num 子类没有赋值呢 默认初始化值为0 所以打印的是zi show 0
然后父类的构造方法运行完毕,找到子类的构造方法,执行 int num = 8 接着执行子类的构造代码块 打印 zi
然后发现子类构造方法调用了 show 方法, 在子类找show方法,运行后打印的是 zi show 8作者: oup 时间: 2015-11-13 22:43
看得有点晕