李志群 发表于 2012-10-7 23:15
随便您 呵呵 你看好我发的视频 和例子 在说 你看看我发那视频讲的是什么 。。你和我讲的是一个吗 你就说 ...
好啊,我看你能撑多久.
你自己听听你发的那视频,从6分20秒时开始听,看看老毕说的是什么.怎么,你以为我没有听过吗,老毕7个G多的完整的视频我都早下载过了.
现在又看看你发的例子:- class fu {
- fu() {
- show();
- }
- void show() {
- System.out.println("fu show run");
- }
- }
- class zi extends fu {
- int num = 8;
- {
- // 构造代码块
- System.out.println("cons code num= " + num);
- }
- zi() {
- // super();隐式的
- // 显示初始化隐式的
- // 构造代码块 隐式的
- System.out.println("cons function num = " + num);
- }
- void show() {
- System.out.println("zi show num= " + num);
- }
- }
- public class InitTest {
- public static void main(String[] args) {
- new zi();
- /*
- * 打印结果。 zi show num= 0 cons code num= 8 cons function num = 8
- */
- }
- }
复制代码 这是你自己写的代码吧,你自己不写好注释了,程序运行结果为:
zi show num= 0// 结果1
cons code num= 8// 结果2
cons function num = 8// 结果3
结果1: 父类的构造方法先调用到(因为父类没有成员属性,也没有构造代码块,所以父类就执行构造方法.),构造方法中调用到show()方法,由于多态,所以其实是调用到的子类的show()方法,从而出现结果1.
结果2: 父类的构造方法执行完后,就轮到子类了.首先是将子类的成员变量进行显式初始化(子类成员与父类成员的默认初始化,在子类的构造方法里调用到super()语句时,就开始执行了.所以结果1中,num的值为0就是因为在父类的构造方法还没有执行完毕时,子类的成员变量只有默认初始化时的值,子类的成员还没有进行显式初始化,所以num的值为0.),子类成员显式初始化后,num的值就为8.然后就执行子类的构造代码块,所以输出结果2.
结果3: 子类在成员的显示初始化与构造代码块分别执行完后,才轮到子类的构造方法开始执行,于是才有结果3.
我看你现在还能说什么,你继续争下去啊,我很期待. |