日期:2014-05-20  浏览次数:20590 次

关于对象多态性,不太理解
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();