关于对象多态性,不太理解
Java code
class A{
public void fun1(){
System.out.println("A中方法");
}
}
class B extends A{
public void fun1(){
System.out.println("B中方法1");
}
public void fun2(){
System.out.println("B中方法2");
}
}
public class test02{
public static void main(String args[]){
A a = new B();
a.fun1();
}
}
很简单的代码,只是不明白为什么a调用fun1()方法后为什么出现的是"B中方法1",这里不是已经把a变成父类A中的实例了么?
A a = new B()这个一直不是很理解,希望高手能给讲下,谢谢!
------解决方案--------------------
A a = new B();
//这种对象实例化方法叫做“对象上转型”
// 即:用父类(A)声明对象(a),用子类(B)去实例化(new)对象(a)
//对象上转型特点:对象(a)只能调用父类(A)中的成员或方法。不能调用父类中没有的方法!
//如果父类中的成员或方法被子类覆盖了(被重写),则调用子类的方法。
//当调用 fun1()时发现其被子类重写了,所以调用子类的 fun1();