多态的解读

2019-07-05  本文已影响0人  Apple_Boy

多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)

实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

父类类型的变量可以引用子类型的对象(父类类型的变量指向子类的实例)--动态绑定

多态的作用:消除类型之间的耦合关系。

现实中,关于多态的例子不胜枚举。比方说按下F1键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

多态特点:只能执行父类中已有的方法,重写的话则执行子类中,没有的话执行从父类继承的,实例变量没有多态,静态方法没多态

多态存在的三个必要条件

一、要有继承;  二、要有重写;   三、父类引用指向子类对象。

Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。

在Java中,多态大致可以分为以下几种情况:

1)person为父类,student为子类。那么:person p=new student();

2)fliable为接口,bird为实现接口的类,那么:fliable f=new bird();

3)fliable为抽象类,bird为继承fliable的类,那么:fliable f=new bird();

多态时需要说明p声明为父类的引用,但他实际为子类引用。但是他只能调用父类中的方法。如果子类中的方法覆盖了父类方法,那么将调用父类方法(虚方法调用)。接口多态也是同样的,也许你会问,如果f要调用自己的方法,那岂不是出错了?其实这里也是方法的覆盖,因为实现接口的子类肯定会实现接口中的方法, 所以此种情况下调用的是bird中的方法。但是如果bird有一个方法在接口中没有定义,那么f不能调用。

多态的好处:A:提高了代码的维护性(继承保证)B:提高了代码的扩展性(由多态保证)

弊端:

不能使用子类的特有功能。

我就想使用子类的特有功能?行不行?怎么用呢?

A:创建子类对象调用方法即可。(可以,但是很多时候不合理。而且,太占内存了)

B:把父类的引用强制转换为子类的引用。(向下转型)

对象间的转型问题:向上转型:Fu f = new Zi();向下转型:Zi z = (Zi)f; //要求该f必须是能够转换为Zi的.(所属关系)

上一篇 下一篇

猜你喜欢

热点阅读