public class AA {
int count = 2; public void getCount() { System.out.println("A" + this.count);
}}class BB extends AA {
int count = 20; // 重写方法
public void getCount() {
System.out.println("B" + this.count);
}
}class Test{
 public static void main(String[] args) {
 AA a=new AA();
 System.out.println("直接调用A的变量"+a.count);//1
 a.getCount();//2
 BB b=new BB();//3
 System.out.println("直接调用B的变量"+b.count);//4
 b.getCount();//5
 AA ab=new BB();//6
 System.out.println("----"+ab.count);//7
 ab.getCount();//8
 
}
}
输出 标志的1,2,3,4,5,6,7,8等处得值
麻烦解释下 7,8两处。尤其是7那里 和我猜想不一样,应该是我没理解对!请高手帮忙解释

解决方案 »

  1.   

    我没有拿来测试!我想8应该是类BB的getCount();当你学到多态的时候你会明白(当然,你这个程序并不存在多态)。7应该是AA的Count,虽然引用ab指向BB,但他是父类的引用。
    呵呵,去测试下看。
      

  2.   

    完全正确的!但是我就是不明白咯:7那里也是BB 的对象啊!是BB对象调用的count啊为什么不是20呢?
    AA ab=new BB();//6这句话具体怎么理解啊??
    7既然是2那么8为什么又是20呢?
    那位给解释清楚下啊!呵呵 小弟愚钝......
      

  3.   

    不明白为什么lz的public类是AA,而含有main方法的Test类确实默认的访问权限,这程序能跑吗???
    除开这个问题,其它就是继承和多态的问题。Java的成员变量不支持后期绑定,和引用类型保持一致,而方法是后期绑定,所以和对象的类型一致。因此,7的值为AA里面的2,而8的值是调用了BB中的getCount()方法,得到的值为20。简而言之就是,多态只针对方法,不针对成员变量希望这个答案对你有帮助
      

  4.   

    请楼主记住三点:1、多态机制只是针对非静态的方法 2、子类与父类的重名方法无论是静态还是非静态都不具有多态的性质,本例中AA ab=new BB() 说明类型是AA类型的,所以访问的成员变量当然是AA的实例的 3、对于重名的静态方法,也是反映超类的特性也不具有多态性