重温java知识(二十、面向对象多态性之二:对象的多态性之对象对象向下转型)

对象的多态性(父类与子类实例之间的转换处理);

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】---飞行能力
发布了149 篇原创文章 · 获赞 4 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/yuzhiboyouzhu/article/details/105706060