多态的解读

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

实现多态的技术称为: 动态绑定(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的.(所属关系)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Apple_Web

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值