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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马-郑玉元 于 2013-3-16 07:15 编辑
  1. class Super
  2. {
  3.         int i=0;
  4.         public Super(String a)
  5.         {
  6.                 System.out.println("A");
  7.                 i=1;        
  8.         }
  9.         public Super()
  10.         {
  11.                 System.out.println("B");
  12.                 i+=2;
  13.         }
  14. }
  15. class Demo extends Super
  16. {
  17.         public Demo(String a)
  18.         {
  19.                 super();
  20.                 System.out.println("C");
  21.                 i+=5;                                
  22.         }
  23.         public static void main(String[] args)
  24.         {
  25.                 int i=4;
  26.                 Super d=new Demo("A");//父类引用指向子类对象

  27.                 System.out.println(d.i);  
  28.         }
  29. }
复制代码
求解释清楚!!!谢谢!!!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 罗海云 于 2013-3-15 20:33 编辑

  1. <P>我来给你说下运行流程吧,
  2. class Super
  3. {
  4.         int i=0;
  5.         public Super(String a)
  6.         {
  7.                 System.out.println("A");
  8.                 i=1;        
  9.         }
  10.         public Super()   <FONT color=#ff0000>第三步</FONT>
  11.         {
  12.                 System.out.println("B");   //输出B
  13.                 i+=2;       //i = 2
  14.         }
  15. }
  16. class Demo extends Super
  17. {
  18.         public Demo(String a)
  19.         {
  20.                 super();// 调用父类无参构造方法//  <FONT color=red>第二步</FONT>
  21.                 System.out.println("C");//输出C  //<FONT color=red>第四步</FONT>
  22.                 i+=5;                   //这儿调用的是父类的i。因为下面主函数的I是局部变量。作用与一个大括号内。 I = 7.             //<FONT color=red>第五步
  23. </FONT>        }
  24.         public static void main(String[] args)
  25.         {
  26.                 int i=4;
  27.                 Super d=new Demo("A");//父类引用指向子类对象   多态<FONT color=red>。//第一步
  28. </FONT>
  29.                 System.out.println(d.i);  所以输出7。。  //<FONT color=red>第六步</FONT>
  30.         }
  31. }</P>
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 祁振朋 于 2013-3-15 20:25 编辑

Super d=new Demo("A");//父类引用指向子类对象    ----调用Demo构造方法
public Demo(String a)

18.        {

19.                super();                      //      调用父类无参构造方法。所以打印B,i=2

20.                System.out.println("C");   //打印C

21.                i+=5;                              //i=i+5    i=7  (d.i)  //父类引用指向子类对象,父类中有属性i,所以输出的是父类的i

22.        }

父类引用子类对象。如果调用实例属性:
                                前提:父类中是否存在属性
                                调用:父类中的属性。      

子类调用构造函数时,super()  先调用父类无参构造。



评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
父类引用子类对象。如果调用实例属性:
                                前提:父类中是否存在属性
                                调用:父类中的属性。        
回复 使用道具 举报
首先,需要说明的是子类Demo 中的i变量是个局部变量,作用于一个大括号内,而最终输出的是d.i调用的是类成员变量i,Demo是Super的子类,经过调用父类的无参构造方法中 i+=2;和子类Demo中有参构造方法中的i+=5(这里的i是2),最后i的值为7.
回复 使用道具 举报
罗海云 发表于 2013-3-15 20:12

你没标12345!!
回复 使用道具 举报
刘海浩 发表于 2013-3-15 20:24
首先,需要说明的是子类Demo 中的i变量是个局部变量,作用于一个大括号内,而最终输出的是d.i调用的是类成 ...

两个i用的是同一个么???怎么不是分别存在两地呢???
回复 使用道具 举报
黑马-郑玉元 发表于 2013-3-15 20:26
你没标12345!!

OK.标了..
回复 使用道具 举报
若还有问题,继续追问;没有的话,请将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马