一、多态的概念
1.面向对象三大特性:封装、继承和多态。
2.多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。
举一个生活中通俗易懂的例子理解多态的现实意义:
小灰灰既是一只狼,同时也是灰太狼的儿子,羊村的学生。
这里灰太狼的儿子和狼都是小灰灰父类的子类。
二、多态存在的前提
1.需要有继承关系
2.需要有方法覆盖
3.父类引用指向了子类的实例
三、多态的特点
1.可替换性(substitutability)
多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)
多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性(interface-ability)
多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
4.灵活性(flexibility)
它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)
多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
四、多态的转型
多态的转型分为向上转型和向下转型。
E·g:父类Parent,子类Child
父类的引用指向子类对象:Parent p=new Child();
向上转型:多态本身就是向上转型过的过程,即将子类对象地址赋值给父类引用,能够写出通用的代码,做出通用的编程,统一调用标准。
Parent p = new Child();//向上转型,此时,p是Parent类型
向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,即由父类型转为子类型。这种强制转型的方法使用得较少。
Child c = (Child)p;//此时,把Parent类型的p转成小类型Child
五、关于多态的实例
public class LianXi1_2 {
//使用多态
public static void main(String[] args) {
//创建灯泡对象
RedBulb r1=new RedBulb();
GreenBulb g1=new GreenBulb();
//创建台灯对象
Lamp l1=new Lamp();
//给台灯对象的属性赋值
l1.b=r1;
l1.b=g1;
//调用台灯对象的方法
l1.on();
}
class Lamp{//台灯类
//灯泡是台灯的一个数据
//定义父类类型的成员变量
Buib2 b;
void on() {
if (b!=null) {b.light();}
}
}
//抽取子类中共同数据和功能形成父类
abstract class Buib2{
abstract void light();
}
//让所有子类继承父类
class RedBulb extends Buib2{
//根据子类需求 实现父类方法
void light() {
System.out.println("红灯泡 发光:红");
}
}
class GreenBulb extends Buib2{
void light() {
System.out.println("绿灯泡 发光:绿");
}
}