日期:2014-05-20  浏览次数:20759 次

大家说说最后输出的是什么。。(简单)
大家说说最后输出的是什么。。
如果是说a=3的话请说下理由,谢谢..

class   Foo   {
    public   int   a;
    public   Foo()   {   a   =   3;   }
    public   void   addFive()   {   a   +=   5;   }
}
 
class   Bar   extends   Foo   {
    public   int   a;
    public   Bar()   {   a   =   8;   }
    public   void   addFive()   {   a   +=5;   }
}
   
public   class   Test{
      public   static   void   main(String[]   args){
            Foo   foo   =   new   Bar();
            foo.addFive();
            System.out.println( "value: "+   foo.a);
      }
}

------解决方案--------------------
多态中属性遮盖的问题
尽管子类调用了构造函数和后面的函数,但都是对子类中的这个a做的操作

但在输出函数中使用多态调用的还是父类的那个a的值,所以还是3
------解决方案--------------------
这里声明的是以BAR为实例的 FOO对象.

子类覆盖父类只对方法覆盖...不覆盖参数

因此这里执行addFive()没有更改父类的参数a,只是修改了bar实例中的a