麻烦分析下这个简单的java程序
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那里 和我猜想不一样,应该是我没理解对!请高手帮忙解释
[解决办法]
方法有多态,成员变量无多态。
[解决办法]
我没有拿来测试!我想8应该是类BB的getCount();当你学到多态的时候你会明白(当然,你这个程序并不存在多态)。7应该是AA的Count,虽然引用ab指向BB,但他是父类的引用。
呵呵,去测试下看。
[解决办法]
不明白为什么lz的public类是AA,而含有main方法的Test类确实默认的访问权限,这程序能跑吗???
除开这个问题,其它就是继承和多态的问题。
Java的成员变量不支持后期绑定,和引用类型保持一致,而方法是后期绑定,所以和对象的类型一致。
因此,7的值为AA里面的2,而8的值是调用了BB中的getCount()方法,得到的值为20。
简而言之就是,多态只针对方法,不针对成员变量
希望这个答案对你有帮助
[解决办法]