一,什么是多态
多态意味着“不同的形式”,指允许不同子类型的对象对同一消息做出不同的响应。
多态是继数据抽象和继承之后的第三者基本特征,是一种不能单独来看待的属性,相反只能作为类关系全景中的一部分,与其他特性协同工作,实现程序的可扩展性,消除类型之间的耦合关系。
多态也被成为动态绑定,后期绑定和运行时绑定,即运行时根据对象类型进行绑定。实现多态的方式有两种:一是(通过数据抽象,继承,接口实现的)方法重写,二是通过转型实现的对象造型。
如图,对同一消息的处理,不同子类型对象做出的回应可能不一样,这种性质叫做多态。
二,Java转型和Java代理
在Java多态中,对象造型的方式对应的概念叫Java转型,Java转型分为向上转型和向下转型。
向上转型指的是父类引用可以指向子类对象,比如Object o1 = new Square();我们把一个物体的父类引用指向了其子类的对象,调用方法还是子类中的方法。父类与子类调用顺序:
1.父类静态代码块
2. 子类静态代码块
3.父类构造方法
4.子类构造方法
5. 子类普通方法
6.子类重写的父类方法
不过,子类引用不能指向父类对象,所以如果需要向下转型,就需要强制转换,如:Square s1 = (Square) o1;可是这样显然没什么用处。
后来经过商业模式的开发运作,我们发现如果想要多态具有真实性封装和粒度控制的特性,就需要另外一种机制即代理的作用。