0
点赞
收藏
分享

微信扫一扫

Java的多态性

最后的执着 2022-05-04 阅读 59

1、引入

面向对象程序设计的三大支柱是封装、继承和多态。下面在介绍多态前,先引入两个概念:向上转型(upcasting)和向下转型(downcasting)。

首先是向上转型,如图定义一个基类Human和两个派生类Male和Female

运行结果如下图

从这个例子可以看出:

1.向上绑定不用强制转型。

2.基类引用指向的或者调用的方法是派生类的方法,这个叫做动态绑定。

3.向上转型后基类引用不能调用派生类自己的独有的方法。

下面介绍向下转型

从这个例子可以看到,向下转型就是使基类引用可以调用派生类的自己的方法,需要先向上转型再强制类型转换。

2、多态性的概念

通过上述两个例子,一个引用变量h可以存放基类Human的地址。

Human h = new Human();

也可以让引用变量h存放Human的基类Male或者Female的地址。

h = new Male();//向上转型

h = new Female();//向上转型

所以多态性就是指采用多种形式的能力,在Java中,引用变量可以是多态的,即它可以存放不同类对象的地址,只要这些类是它声明的类的派生类即可。

3、多态性和动态绑定

1.如果派生类对象已经重写了基类中的一个方法,如果引用变量调用此方法,所执行的方法是派生类的版本。

2.当一个引用变量含有多态性是,Java执行的是动态绑定或者迟绑定。(Java虚拟机在运行时根据当前引用变量所指的对象的类型决定到底调用哪个版本。)

3.如果基类的方法被重写了,那么是对象的类型而不是引用变量的类型决定了哪个方法被调用。

比如当Human h = new Male();时,此时引用变量h指向的是Male类的地址,h.sleep调用的Male的方法而不是Human的方法。Human h = new Female();同理。

4.不能将基类对象赋值给派生类的引用变量。比如Male m = new Human();是错误的。

4、总结和案例

多态就是基类型对象访问派生类重写的方法,循环调用基类对象,对不同派生类方法进行访问。可以理解为实参是派生类,形参是基类。

演示案例

 

 

 

举报

相关推荐

0 条评论