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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 天天学习 于 2013-12-26 22:37 编辑

代码1:
  1. class Fu
  2. {
  3.         int i;
  4.         Fu()
  5.         {
  6.                 i = 5;
  7.         }
  8. }
  9. class Zi extends Fu
  10. {
  11.         int i;
  12.         Zi(int i)
  13.         {
  14.                 this.i = i;
  15.         }
  16. }
  17. class Test
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 Fu f = new Zi(3);
  22.                 System.out.println(f.i);
  23.         }
  24. }
复制代码
代码2:
  1. class Fu
  2. {
  3.         int i;
  4.         Fu()
  5.         {
  6.                 i = 5;
  7.         }
  8. }
  9. class Zi extends Fu
  10. {
  11.         Zi(int i)
  12.         {
  13.                 this.i = i;
  14.         }
  15. }
  16. class Test
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 Fu f = new Zi(3);
  21.                 System.out.println(f.i);
  22.         }
  23. }
复制代码
代码1打印为5,而代码2打印3而不打印5,具体原因是什么?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

8 个回复

倒序浏览
首先,Zi 继承了Fu ,int i 是public的即,Zi也是可以继承的,new Zi(3)此时就给了 i 赋值,因为new的时候没有使用的是无参构造,所以,不会执行Fu()这一构造

评分

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

查看全部评分

回复 使用道具 举报
第一题子类有自己的成员变量i所以不用父类的
第二题子类没有自己的成员变量,继承的父类的成员变量所以把i修改成3
回复 使用道具 举报
Zi继承Fu   相当于Fu 里的东西Zi都有  那么new Zi(3),就会在Zi里找带参构造,this 代表的是本类的对象.把子的参数3赋值给了Fu中的变量i.就把Fu里的东西都放Zi 里就清楚了
回复 使用道具 举报
就把Fu里的东西 全部放Zi 里
你就能看清楚了
this代表的是本类的变量  
带参构造Zi(3)
就是把3赋值给了  Fu 中的变量i

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 鼓励分+1

查看全部评分

回复 使用道具 举报
对于代码1,我曾经看到过这样的解释:声明父类对象用子类进行实例化时,这个被声明的对象是一个父类对象,但是它指向了子类的引用,它的属性保留的是父类里边的属性,但是它调用的却是子类里边的方法,即f的属性i
回复 使用道具 举报
接上,属性i是用的父类中的i
回复 使用道具 举报
代码2:我感觉是因为子类的构造方法zi(int i)中执行this.i=i是发现子类中没有i这个属性,所以默认把i的值赋给了父类中的i.------我也在学习,仅供参考。
回复 使用道具 举报
代码一 成员变量无论编译和运行,都参考左边 所以是5  而代码二因为子类继承了父类中的i  那么修改成3
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马