为了账号安全,请及时绑定邮箱和手机立即绑定

求大佬详细告知此题为什么是3

求大佬详细告知此题为什么是3

子衿沉夜 2018-07-05 09:18:36
 public class Foo {     public int a;     public Foo()     {         a = 3;     }     public void adddFive()     {         a = a+5;      } } class Bar extends Foo {     public int a;     public Bar()     {         a = 8;     }     public void adddFive()     {         this.a+=5;      }     class TestFoo {     public static void main(String[] args)     {         Foo foo = new Bar();         foo.adddFive();         System.out.println(foo.a);     } } }
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

再说详细一点吧。
Foo foo = new Bar();
System.out.println(foo.a);
为什么foo.a不是bar的那个a,因为编译器在编译System.out.println(foo.a);的时候不能假设foo是Foo的哪个派生类,虽然你这里写了Foo foo = new Bar();
看如下代码:
Foo foo = new Bar();
foo = getfoo(); //假设getfoo可以返回Foo或者Foo的另一个派生类,比如class Bar1 : extends Foo {} ,返回new Bar1,此时bar1和bar类型不兼容
System.out.println(foo.a); //因此foo.a不能假设是bar.a,因为foo不能假设是bar类型,还可能是foo类型,还可能是bar1类型

查看完整回答
反对 回复 2018-08-05
  • 1 回答
  • 0 关注
  • 795 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号