§ 2.5 多态
? 本节主要内容
– 多态
– 多态的实现
2.5.1多态的定义
? 对象的多态性是指在基类中定义的属性或行为
被派生类继承之后,可以具有不同的数据类型
或表现出不同的行为。
? 例如:“几何图形”的“绘图”方法,“椭圆”
和“多边形”都是“几何图”的派生类,其
“绘图”方法功能不同。
2.5.1多态的定义
? 在 Java中,多态性体现在两个方面:由方法重载实现
的静态多态性(编译时多态)和方法重写实现的动态
多态性(运行时多态)。
– 1.静态多态
? 在编译阶段,具体调用哪个被重载的方法,编译器会根据参数
的不同来静态确定调用相应的方法。
– 2.动态多态
? 由于派生类继承了基类所有的属性(私有的除外),所以派生
类对象可以作为基类对象使用。程序中凡是使用基类对象的地
方,都可以用派生类对象来代替。一个对象可以通过引用派生
类的实例来调用派生类的方法。
2.5.2 静态多态
? 静态多态在 Java中的实现主要通过方法的重载
来实现。
? 在同一个类中,可以定义多个同名但参数不同
的构造方法,这就是方法重载的体现。构造方
法可以重载,一般的类方法也可以实现重载。
? 示例 2.5.1 静态多态在 Java中的实现(见书 114
页)
2.5.3 动态多态
? 动态多态是通过类与类之间方法的重写来实现。
在基类中定义的方法可以有实现,也可以无实
现(称为抽象方法),在派生类中对基类中的
方法体进行重写的过程就是动态多态的实现。
? 示例 2.5.2 动态多态演示 (见书 115页)
2.5.3 动态多态
? 重写方法的调用原则
– Java运行时系统根据调用该方法的实例,来决定调
用哪个方法。对派生类的一个实例,如果派生类重
写了基类的方法,则运行时系统调用派生类的方法;
如果派生类继承了基类的方法(未重写),则运行
时系统调用基类的方法。
– 示例 2.5.3派生类调用基类方法。 (见书 117页)
2.5.3 动态多态
? 方法重写时应遵循的原则:改写后的方法不能比被重
写的方法有更严格的访问权限(可以相同)。
? 例如,示例中的基类方法 display()的访问权限为
public类型的,那么在派生类中,如果要重写该方法,
则该方法的访问权限必须为 public的。如果基类中的
display()方法的访问权限为 protected类型的,那么
在派生类中重写该方法时,该方法的访问权限必须为
protected的或 public的,不能为 private的。
小结
? 通过本节学习,使我们主要学习了如下主要内
容,
– 多态的作用
– 多态在 java中的实现技术