多态性之编译期多态和运行期多态(JAVA版)
上一篇讲述了C++中的多态性,由于多态性是面向对象编程中常用的特性,所以JAVA作为面向对象的主流语言自然也有多态性,它的多态性其实和C++的概念差不多,只是实现形式和表现形式不一样。在C++中可能还会提到多态的划分,但是在JAVA中可能很多人都不会听到编译期多态和运行期多态这种划分,一般我们说到多态都是指运行期多态,因为这才是面向对象思想的真正体现之处,即OOP(面向对象)的多态性的体现,所以JAVA中我们不再讨论编译期多态这个问题,只重点讨论运行期多态,下面简称运行期多态为JAVA中的多态性。
1. 编译期多态(静态多态)
如上所述,此处不再多说,大家如果学习JAVA的话就不要深究这个问题了,直接进入运行期多态。
2. 运行期多态(动态多态)
运行期多态主要是指在程序运行的时候,动态绑定所调用的函数,动态地找到了调用函数的入口地址,从而确定到底调用哪个函数。
(1)前提
A. 要有继承关系。
B. 要有方法重写。其实没有也是可以的,但是如果没有这个就没有意义。
C. 要有父类引用指向子类对象。
B. 要有方法重写。其实没有也是可以的,但是如果没有这个就没有意义。
C. 要有父类引用指向子类对象。
(2)多态中的成员访问特点
A. 成员变量:编译看左边,运行看左边。
B. 构造方法:创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
C. 成员方法:编译看左边,运行看右边。由于成员方法存在方法重写,所以它运行看右边。
D. 静态方法:编译看左边,运行看左边。静态和类相关,算不上重写,所以,访问还是左边的。
(3)多态性的例
(3)多态性的例