什么是多态
同一种类型的前提下允许一种类型表现出与其他类型之间的区别,这主要根据类的行为(方法的实现)不同而表现出来
1、能做到这一切的基础是:
a、java封装性(合并类的特征和行为创建新的数据类型)
b、java继承性(允许将对象当做自己的类型和基类型来处理这里为向上转型创造了条件)
c、java 可以向上转型
d、java可以动态绑定
2、多态带来的好处是:
(1)多态消除了类型之间的耦合关系
多态分离了,做什么(接口)和怎么做(实现)
使用向上转型,让所有导出类的接口都可以用基类来调用(类型的耦合关系解除)
(2)增加了程序的可扩展性
可以通过操作基类来调用对象这也就不需要改动上层就可以产生新的数据类型
(3)增加了代码的可读性和结构性
3、java的方法调用绑定
方法绑定指将一个方法和方法调用和方法主体(方法体)绑定起来
前期绑定:编译器在连接程序时实现,主要是调用的方法都已经可以确定下来比如c语言
和在java中用private 和 final 以及static声明的方法。这类型的方法不会被覆盖所以在调用的时期基本可以确定调用的方法体。
后期绑定:在程序运行时实现绑定,java向上转型时故意丢掉本身对象的类型来完成类型之间的解耦
这样在通过基类来处理对象时编译阶段根本无法确定对象的实际类型,这也就无法确定该调用哪个对象的对应方法
同时又让后期绑定成为了必要
4、多态不适用的地方
域与静态方法
域的访问都是由编译器解析的,因此都不是多态的
构造方法