我的问题是:
对象a的实际类型,这里是指A,还是B ?
如果是A的话,a.printValue(),调用的是B中的方法,这里的动态绑定顺序又是怎么回事?
这里和A()中调用printValue(),调用B中的方法,是否是相同原因? 作者: 刘军亭 时间: 2013-1-27 12:29
A a = new B(); //在A类型的引用了一个B类型的对象。
a.printValue(); //打印的是B类中的方法,因为B类中覆盖了A类的printValue()
((B)a).getField();//这个也是打印的B类中的方法,
class A {
public A() {
printValue();// A a = new B(); 用于初始B的时候会先初始父类A,
//由于传进来的是B的this对象,又由于B类复写了A类的方法,
//所以这里调用的是B类的方法。
}
public void printValue() {
System.out.println("A_printValue");
}
}作者: 黑马张旭 时间: 2013-1-27 13:03
多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提:存在覆盖。