A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

©   /  2014-9-20 12:13  /  1554 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

首先需要明白几个关键点,子类,父类的执行顺序,成员变量开辟空间和赋值时机。第一执行的肯定是 为变量和方法开辟内存空间,第二按照继承顺序 逐步往下执行,在执行构造方法之前 先为 类所在层次的 变量赋值;第三 执行构造方法,如果构造方法体里面,包含被子类 重载的方法,那么执行的是 子类的所覆盖的方法。我是按照断点调试的方法得出的,在i ,j 变量,父类的print()分别设定断点,你也可以用这种方法试试。
根据题目的执行顺序如下:
1、为子类变量  j  和父类 i  开辟内存空间
2、执行 父类Super的 构造方法  
2.1 执行print() ,由于Super的 print()  被重载,所以执行的是  Sub 类中 的 print()  ,由于此时 J 只开辟了空间,尚未赋值,所以为 0,因而第一被打印出来的是 0 ;
3、执行  Sub  类的构造方法 ,在 执行 Sub  类 的构造方法之前就已经 为 j 变量赋值了。接下来的程序,自然不用我说了;
         
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马