b.fun1();//就是把他的方法复制过来是一个效果
至于a.fun1();
相当于 B b=new B(); ----->a=b; -------->a=new B(); -------->A a=new B();
A a=new B();
表示定义了一个A类型的引用,指向新建的B类型的对象。
由于B是继承自它的父类A ,所以A类型的引用是可以指向B类型的对象。
既是在堆内存中 对象变量是a,在栈内存中new 的是B ,a对象指向了new B()
所以 a.fun1() 调用的就是B中的方法
因为是父类的引用,所以只能找到父类中的方法,或者子类中重写(覆盖)了的父类的方法。
|