引言
多态和封装、继承一起作为面向对象的三大特性,无论是Java还是其他面向对象的语言,相信很多人谈起多态可能都不会陌生,绝大多数都可以说出多态的很多知识,可往往在现实项目的开发过程中,这最基本的特性,由于种种原因,常常被人遗忘或者懒得使用,要知道我们编码并不是仅仅追求完成任务,假如说后期的维护升级还是要你来做的话你就会深刻感受到了,笔者最近对接了一位同事的项目深有感触,同时这也是深刻理解设计模式的必修课,所以总结下。
一、多态概述
多态和封装、继承一起作为面向对象的三大特性,无论是Java还是其他面向对象的语言,灵活使用好多态,对于提高我们的编码质量尤其重要,首先多态体现了动态绑定(dynamic binding),即在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法,这就提供了很大的灵活性,同时也利于消除类型之间的耦合度。
1、多态的定义
指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息即函数调用),简而言之就是同样的方法名在不同的对象中可以实现不同的功能
2、多态的条件
要有继承或者实现接口
重写,即子类重写或者覆盖父类的方法
子承父业,即定义父类的引用用子类来赋值初始化
3、多态的实现方式
接口实现,继承父类进行方法重写,同一个类中进行方法重载,在使用的时候使用不同的子类去初始化父类。
二、多态的应用
假如我们有以下的需求:求根据输入的值求长方形、圆形的面积,其中计算长方形面积时要求输入长和宽,计算圆形时只需要半径即可,接下来逐步分享下以多态的思想来解这个题。
首先,所谓面向对象即把一切看成对象,很明显长方形、圆各自可以抽象成为一个Java对象,然后输入值和计算面积可以抽象为方法,首先把他们共性的功能抽象为接口
public interface IShape {
void input();
float getArea();
}
此时我们已经定义了个形状接口,一般来说我们只要分别定义长方形类和圆形类并实现这个IShape接口即可,但是封装性还是不高,因为无论是求哪个形状的面积都得先输入再计算,这是一个流程,于是封装了一个流程类
public class ShapeProcess {
private IShape ishape;
public ShapeProcess(IShape shape){
this.ishape=shape;
}
pu