重温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】---飞行能力
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值