class A{}
class B extends A{}
A a=new B();
这样,a是A的对象 .但是他调方法的时候是编译的时候看做边,执行看右边。比如 调用A中的一个show方法,a.show();编译的时候看左边,只要A类中有这个方法就不会报错,然后执行的时候是看右边的,也就是执行的是B类中重写的那个方法。
如果把A改为接口,那就是是接口A的对象。但是接口都是抽象类,所以不能实例化,A a = new B(); 也是多态,让B 实现A接口,这样B类中一定会重写接口中的方法,然后用A对象调方法,其实执行的是b类中重写的方法。这就是多态的特点。父类或者父接口不能实例化的时候都是用A a = new B();的方法。实际的是调用的子类中重写的方法,但是对象是父类的对象。 |