直接上代码
class Bird{
   int size=10;
   void print(){
      System.out.println("aa");}
}class Vane extends Bird{
   int size=20;
      void print(){
      System.out.println("bb");}
}public class hello{
   public static void main(String[] args){
       Vane a=new Vane();
       System.out.println(a.size);
       Bird b=new Vane();
       System.out.println(b.size);
       a.print();
       b.print();
        }
}结果是:20
        10
        bb
        bb
 成员变量的输出结果还可以理解,后面方法的调用就不知道了,请高手解答

解决方案 »

  1.   

    a对象是Vane,调用Vane的print
    b对象还是Vane,它是Vane实例化的(new Vane)
      

  2.   

    http://blog.csdn.net/thinkGhoster/archive/2008/04/19/2307001.aspx
    楼主看看这个BLOG吧
      

  3.   

    这就是多态了 
    对象是谁new出来的 同名方法(也就是重写的方法)就调用谁的
    这个要从Java中方法的动态绑定解释
    而同名的属性 因为父类引用无法引用到子类的属性故打印出来的是父类的
    即属性看引用类型,方法看对象类型。
    建议LZ看看 thinking in Java 
    那里边讲的比较细致
      

  4.   

    子类总是可以被看成父类来用,但行为还是子类的行为
    换个更直观的例子
    把你的鸟类换成动物(Animal),把你的vane换成人(Person)
    把你的print换成cry当你 Animal a = new Person();
    a.cry时,你说是人在哭,还是动物在哭
      

  5.   

    不是特别好吧这个例子,都弄糊涂了! 那a.age 是人的年龄还是动物的啊!
      

  6.   

     Bird b=new Vane(); //父类引用指向子类对象
      

  7.   

    多态啊!  调用父类的方法,要用到关键字 super