一.多态概述
生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样 的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也是不一样 的。可见,同一行为,通过不同的事物,可以体现出来的不同 的形态。
多态: 是指同一行为,对于不同的对象具有多个不同表现形式。
程序中多态: 是指同一方法,对于不同的对象具有不同的实现。
多态前提条件:
- 继承或者实现【二选一】
- 父类类型指向子类对象【格式体现】 父类类型 变量名 = new 子类类型();
- 方法的重写【意义体现:不重写,无意义】
二.多态的定义和使用
2.1多态定义格式
父类类型 变量名 = new 子类类型();
变量名.方法名();
2.2 普通类多态定义的格式
定义一个父类,写了一个方法 run 。
子类继承父类(Student 继承 Person),重写了 run 方法。
子类继承父类(Teacher 继承 Person),重写了 run 方法。
在测试类中
2.3 抽象类多态定义的格式
2.4 接口多态定义的格式
三.多态时访问成员的特点
- 多态时成员变量的访问特点:编译看父类,运行看父类
- 多态时成员方法的访问特点:编译看父类,运行看子类
四.多态的好处与弊端
4.1 多态的好处与弊端
- 好处:提高了代码的扩展性。实际开发的过程中,父类类 型作为方法形式参数,传递子类对象给方法,进行方法的 调用,更能体现出多态的扩展性与便利。
- 弊端:多态的情况下,只能调用父类的共性内容,不能调 用子类的特有内容。
4.2 类型转换
- 向上转型:子类类型向父类类型向上转换的过程,这个过 程是默认的。
- 向下转型:父类类型向子类类型向下转换的过程,这个过 程是强制的。
- instanceof关键字
为了避免ClassCastException的发生,Java提供了instanceof 关键字,给变量做类型的校验。