一、多态
在了解多态之前我们先了解以下以下的知识点
1. 向上转型
语法原则
下列代码说明多态的语法是怎样?
- 只能对引用调用其引用类型中声明的方法
- 运行时,根据对象类型调用子类覆盖后的方法
从空间角度:
2.方法的覆盖
上一篇文章讲过,这里补充的是它的别名还可以称为覆写/重写/覆盖(Override)。
原则如下:(其中关键字final和static后面学习)
重写与重载的区别:
3.向下转型
向上转型是子类对象转成父类对象, 向下转型就是父类对象转成子类对象。相比于向上转型来说, 向下转型没那么常见,但是也有一定的用途。
instanceof关系运算符
instanceof 可以判定一个引用是否是某个类的实例,如果是, 则返回 true;这时再进行向下转型就比较安全了。
换句话说, instanceof关系运算符是判断引用中的对象和类名是否兼容,用在强制转换前,避免类型转换失败(抛出异常)。
animal 本质上引用的是一个 Cat 对象, 是不能转成 Dog对象的,下面就不会执行了:
Animal a = new Cat("小猫");
if (a instanceof Dog) { //a引用中对象 是不是Dog false
Dog d = (Dog)a; //a引用中对象 是不是cat ture
d.shout(); //a引用中对象 是不是animal ture
}
所以代码不执行,就不会出现抛出异常这种错误
动态绑定与静态绑定
动态绑定也称为运行时绑定。静态绑定也有编译时绑定的说法。为什么会有这种说法呢?
二、理解多态
满足多态最基本要求
更简单的说,多态就是一个引用能表现出多种不同的形态
而多态是一种思想,实现它的前提有两点:一是向上转型 ,二是调用同名的覆盖方法。
向上转型的形式
向上转型的形式三种
多态应用
可以将不同的子类对象统一放到父类数组中,屏蔽了不同子类差异
修改为:
多态优点
3)可扩展能力强