多态的执行究竟是父类的还是子类的?

首先Java实现多态有三个必要条件:继承、重写、向上转型。

         继承:在多态中必须存在有继承关系的子类和父类。

         重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

         向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。

然后就是多态中的执行问题了,我们可以用一句话来理解,反正我觉得是挺好用的."成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边。"


简单的理解意思就是.比如Animal a = new Cat();  定义了一个Animal类型的引用,指向新建的Cat类型的对象.

这个时候他的成员变量和静态方法与父类是一致的,他的非静态方法,在编译时是与父类一致的,运行时却与子类一致(发生了重写)。