Tip:在面向对象的语言中,三种基本特征是:数据抽象、继承、多态。
为什么要使用到多态?
- 多态可以简化代码,能够刻意的模糊引用对象,让操作使用的更加方便。不管我们导出的是什么类,编写的代码只和基类打交道,就是多态的特点
- 方法调用中的绑定,绑定是指讲一个方法调用与方法主体关联起来。如果在程序执行前绑定叫做前期绑定(它是面向过程中默认的绑定方式,C中只有一种方法调用就是前期绑定),如果在程序运行时根据对象的类型进行绑定,就是动态绑定或运行时绑定,java中除了static与final(private属于final)声明的方法,其他都是动态绑定的。
- 可扩展性,可以从通用的基类继承出新的数据类型,增添新的功能,操纵基类接口的方法不需要任何改动就可以运用到新类。多态是一样让将改变的事物与未变的事物分离开重要技术。
什么是多态
多态是向通过向上转型,同时也能准确调用转型前方法的一种技术,它实现了代码未变与改变的分离,更加贴合目前的开发方式,提供了极大的便利。
多态的缺陷
- “覆盖”私有方法。私有方法应该与公有方法采用不同的方法名称,避免在子类覆盖的时候,无法正确的调用子类的方法,转而调用了基类的私有方法,达不到预期。
- 静态方法无法多态。静态方法是与类关联而不是与对象关联,故无法进行多态。
子类的清理
通常,子类的清理会被垃圾回收器进行处理,如果有清理的的需要,可以在基类中定义清理方法,并在子类中进行覆盖。在清理时需要注意清理的顺序,清理顺序应该按照声明的逆序进行。
在基类构造器中使用动态绑定的方法
当在基类构造器中使用动态绑定的方法时,不会去调用基类本身的方法,而是会调用子类已经重新覆盖的方法。初始化的实际过程是:
- 在任何事物发生之前,将分配给对象的存储空间全部初始化为二进制的0;
- 调用基类的构造器;
- 按照声明的顺序调用成员的初始化方法;调用导出类的主体构造器;
协变返回类型
在导出类的被覆盖方法可以返回基类方法返回的类型的导出类型 看不懂没用过