对象的多态性(父类与子类实例之间的转换处理);
1、对象的多态性之:对象向下转型【子类 子类实例 = (子类) 父类实例,强制完成转换】【向上转型可以实现操作标准的统一性,而向下转型可以保持子类实例的个性化】例子:
package com.mydemo;
// 创建一个“PersonDemo”类
public class PersonDemo {
public static void main(String args[]) {
System.out.println("------ 正常状态下的超人应该是一个普通人的状态------");
// 易错点:必须先发生向上转型,之后才可以进行向下转型,否则会出现ClassCastException异常。
Person person = new Superman(); // 超人是一个人,向上转型
person.run(); // 调用人的跑步能力
System.out.println("------ 超人状态------");
// 为了避免发生“ClassCastException”异常,
// 可以先用“instanceof”关键字进行对对象所属类型判断
if(person instanceof Superman){ //
// Person是父类只拥有父类的方法,如果要想调用子类的特殊方法,则必须强制转为子类实例
Superman superman = (Superman) person; // 强制转为子类实例
superman.fire(); // 子类扩充方法
superman.fly(); // 子类扩充方法
}else{
}
}
}
// 定义一个“人”类
class Person {
public void run() {
System.out.println("【Person】---用力奔跑");
}
}
class Superman extends Person {
/**
* 子类扩充方法
*/
public void fly(){
System.out.println("【Superman】---飞行能力");
}
/**
* 子类扩充方法
*/
public void fire(){
System.out.println("【Superman】---喷火能力");
}
}
运行结果:
------ 正常状态下的超人应该是一个普通人的状态------
【Person】---用力奔跑
------ 超人状态------
【Superman】---喷火能力
【Superman】---飞行能力