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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 完美恋爱   /  2013-12-5 18:22  /  2503 人查看  /  22 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

ily521125 发表于 2013-12-5 22:26
如果你非要让它输出是主函数里的i的话,就直接输出i这样结果就是5了

这个我之前试过了,就是我想说的意思是,我明明都向下转型了,这时调用的i难道不应该是子类里的i吗?
举个例子:
class Fu
{
     int  i  =  3;
}
class Zi   extends  Fu
{
     public  static  void  main(String[]  args)
     {
           int  i  =  5;
           Fu  f  =  new  Zi();
           System.out.println(f.i);  //  i  ==  3;
           Zi  z  =  (Zi)f;
           System.out.println(z.i);  //  i  ==  3;
     }
}
-------------------------------------------------------
class Fu
{
     int  i  =  3;
}
class Zi   extends  Fu
{
     int  i  =  5;
     public  static  void  main(String[]  args)
     {
           Fu  f  =  new  Zi();
           System.out.println(f.i);  //  i  ==  3;
           Zi  z  =  (Zi)f;
           System.out.println(z.i);  //  i  ==  5;
     }
}
为什么这两个最后的i的值会不同呢?
回复 使用道具 举报
下次问题解决了就把类型改成提问结束!谢谢!
回复 使用道具 举报
完美恋爱 发表于 2013-12-5 22:37
这个我之前试过了,就是我想说的意思是,我明明都向下转型了,这时调用的i难道不应该是子类里的i吗?
举 ...


上面的程序子类中没有定义成员变量 i ,不用说输出的两个 i 值都是继承父类的 i;
下面的程序,在执行Zi z=(Zi)d之前使用的是 是父类的i ,执行之后输出z.i就是子类将父类覆盖的i了
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马