概念:
指同一个行为(方法)具有多个不同的表现形式或形态的能力。(即相同的行为,不同的实现)
静态多态 <编译时多态早绑定>
实现方式:重载
指调用在一个类中有多个具有相同名称和不同参数列表的方法。
动态多态
指允许不同类的对象对同一行为(方法)作出响应。即同一行为(方法)可以根据发送对象的不同而采用多种不同的表现方法,
它使用动态绑定技术和方法重写实现的。
动态绑定技术(dynamic binding)也叫延时绑定或后期绑定
是指在执行期间而不是编译时判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。由于动态绑定是在执行期实现,
这将导致Java程序在运行时性能下降,这也是Java程序性能不如其他语言编写的程序的一个主要原因。
动态绑定的条件:
① 要有继承
② 要有方法重写
③ 要有父类变量引用子类对象
④ 要有父类变量调用重写的方法
类的类型转换规则:
1.一个父类引用类型变量可以引用其子类的对象
2.一个父类引用类型变量不可以访问其子类的对象新增的成员变量和方法
3.可以使用instanceof关键字来判断引用类型变量所引用的对象是否属于某一个类。
即判断子类是否是相应父类的子类。
向上转型:
在继承中,子类的对象可以直接当做父类的对象使用。
向下转型:
继承中,从父类对象到子类对象的转换。向下转型要用强制转换。
注:
向上转型是安全的,向下转型是非安全的。建议使用向下转型时,先使用instanceof关键字验证具有的子类类型在进行强制类型转换。
instanceof是boolean类型<xx属于xx>
多态的作用或优点:
1.可替换性。多态对已存在的代码具有可替换性;
2.可扩展性。多态对代码具有可扩展性,增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运作和操作。实际上,
新加的子类更易货的动态功能;
3.接口性。多态是父类通过方法签名,向子类提供了一个类的接口,由子类来完善或覆盖它而实现的;
4.灵活性。她在应用中体现了灵活多样的操作,提高了使用效率;
5.简化性。多态简化了对应用程序的代码编写和修改过程,尤其是在处理大量对象的运算和操作时,该优点突出。
值得注意的是:多态并不能够解决提高执行速度的问题,因为它是基于动态绑定。
Object类的getClass()方法,可以获取引用类型变量所引用的实际对象类型。
当多态机制导致引用变量的声明类型和实际类型引用对象的类型存在不一致是,使用instanceof运算符来判断引用变量所引用的
实际对象类型与某类之间的继承关系。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
抽象
使用了关键字abstract声明的类,叫“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定abstract(抽象)。
“抽象方法”属于一种不完整的方法,只含有一个方法签名,没有方法主体。
抽象类特点:
1.不能实例化对象;
2.如果从抽象类继承一个类,就必须为抽象类中的所有抽象方法提供方法的定义,否则继承的类也会变成抽象类。
3.即使不包含任何abstract(抽象方法),也可以将一个类声明为“抽象类”。如果一个类没必要拥有任何抽象方法,而且我们想禁止那个
类的所有实例,这种能力就显得非常有用。