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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dede668 初级黑马   /  2014-4-21 21:50  /  757 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天我同学问我一个问题,我在这里和大家分享一下自己的理解,不对的地方请大家多指教
  1. class X
  2. {       
  3.         Y b=new Y();
  4.         X(){
  5.                 System.out.print("X");
  6.         }       
  7. }
  8. class Y
  9. {
  10.         Y(){
  11.                 System.out.print("Y");
  12.         }
  13. }
  14. public class Demo extends X
  15. {       
  16.         Demo(){
  17.                 System.out.print("Z");
  18.         }
  19.         Y y=new Y();
  20.         public static void main(String[] args){
  21.                 new Demo();
  22.         }
  23. }
复制代码

在这里,子类继承父类,当new 一个子类时候,因为子类Demo继承父类X所以子类在加载到堆中时候会为父类留一段空间,先进行的是父类X的成员变量初始化Y b=new Y();所以Y加载到堆中,调用Y的空参构造,先打印了一个Y,父类X成员变量Y b=new Y();初始化完毕,会有个super直接指向父类X的方法区,因为子类调用的是父类的空参构造所以打印一个X,子类Demo再进行成员变量的初始化,然后是Y y=new Y();进行初始化,又为Y开辟一个空间,调用Y的空参构造,有打印了Y,然后执行到Demo的空参构造输出语句。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

1 个回复

倒序浏览
dede668 来自手机 初级黑马 2014-4-22 23:18:07
沙发
好吧,没人吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马