12 Java面向对象之多态
12 Java面向对象之多态
① 多态的概念及分类
- 多态的概念:对象的多种表现形式和能力
- 多态的分类
1. 静态多态:在编译期间,程序就能决定调用哪个方法。方法的重载就表现出了静态多态。
2. 动态多态:在程序运行期间,才能决定调用对象的哪个方法。在继承中,父类对象引用指向子类对象。 - 动态多态的特点
- 父类对象可以将引用指向子类对象,也可以指向本类对象。
- 多态其实指方法的多态:创建本类对象调用就是本类的方法。创建子类对象调用就是子类的方法。
- 如果子类没有重写父类的方法,默认就调用子类继承的方法(父类的方法)。
- 只能父类对象引用指向子类对象,不能反过来子类引用指向父类。
- 动态多态存在的条件
- 要有继承(两个类之间存在继承关系,子类要继承父类)。
- 要有重写(子类继承父类,子类一定要重写父类的方法)。
- 父类引用指向子类对象。
- 静态多态与动态多态的区别
- 相同:都是方法的多态,在代码执行过程中调用不同方法达到不同的效果。
- 不同:
- 静态多态重载来实现的,动态多态是用重写来实现的。
- 静态多态一个类的多个方法,相同行为的不同表现形式。
- 动态多态在运行的时候再决定执行的是某个子类里边的方法,将多态的方法分配到每个子类里边。
② 动态多态的应用
- 动态绑定机制
在面向对象程序开发中,将一个方法调用与该方法所在的类关联起来,称为“绑定”。
所谓的动态绑定,是指在运行时根据具体对象的类型进行绑定。
当父类引用指向子类对象的时候,如果调用被子类重写的方法,那么表现得不是父类中的效果而是子类重写后的效果。 - 多态参数
多态参数:就是当方法的某个形式参数是一个引用的时候,与该引用兼容的任何对象都可以传递给方法,从而允许方法接收不同数据类型的形式参数。
例如:equals()方法
如果方法中调用该对象的一个被重写的方法,那么不同类型的子类对象会表现出不同的体现。 - 异构集合
创建一个不是同一类型但是有共同父类的数据集合。不同对象的集合称为异构集合。
③ instanceOf
- Java的多态性导致引用变量类型和实际引用的对象可以不一致。为了更准确区分出引用的是什么类型的对象,Java引入了instanceof运算符。
- 但是在Java中不推荐使用,推荐使用重载的方式。
- 只能用于对象。
④ 对象的转型
- 自动转型
通过父类引用指向子类对象,其实子类自动转换成了父类的数据类型,在继承中子类重写了父类的方法,提供的方法比父类更加强大。
向上转型存在一定的缺陷,将子类转换为父类对象,调用的时候只能调用父类的属性和行为,子类自己扩展的属性和行为无法使用。 - 强制转型
向下转型的好处:可以调用子类继承的属性和方法,还可以调用扩展的内容。
Association between wise men is as pure as water.
posted on 2019-03-18 20:04 PenjayFeng 阅读(172) 评论(0) 编辑 收藏 举报