多态的转型(向上转型和向下转型)

本文通过Java代码展示了多态的向上转型和向下转型概念。向上转型允许子类对象赋值给父类变量,增强代码扩展性;向下转型则可访问子类特有的功能,但需确保对象实际为子类实例。示例中,`Fu`类被`Zi`类继承,`Zi`类拥有额外的`playGame`方法。在多态场景下,`Zi`对象通过父类引用调用`work`方法,然后通过向下转型调用`playGame`。文章还提及了转型异常的可能性及条件。
摘要由CSDN通过智能技术生成

在这里插入图片描述

package com.itheima.demo18duotai;

public class Fu {
    public void work(){
        System.out.println("父亲在工作!");
    }
}
package com.itheima.demo18duotai;

public class Zi extends Fu {
    public void work(){
        System.out.println("儿子在工作!");
    }

    //定义子类特有的玩游戏的方法
    public void palyGame(){
        System.out.println("儿子在玩游戏!");
    }
}
package com.itheima.demo18duotai;

import com.itheima.demo13interface.C;
import com.itheima.demo17duotai.Animal;
import com.itheima.demo17duotai.Cat;
import com.itheima.demo17duotai.Dog;

/*
    多态的转型:
    1.向上转型:多态本身就是向上转型,把子类对象赋值给父类变量
        格式:
            父类类型 变量名 = new 子类对象();
            double d = 10;
        好处:
            扩展性强:可以赋值不同的子类对象,调用不同子类重写后的方法
    2.向下转型:把父类类型的变量强制转换为子类类型
        前提:必须有多态
        格式:
            子类类型 变量名 = (子类类型)父类变量名;
            int a = (int)8.8;
        好处:
            转换为子类类型之后,就可以使用子类特有的功能
 */
public class Demo01 {
    public static void main(String[] args) {
        //1.向上转型:多态本身就是向上转型,把子类对象赋值给父类变量
        //父亲病了,儿子化妆为父亲,替父亲工作
        Fu fu = new Zi();
        fu.work();//儿子在工作!

        //儿子替父亲工作完毕,想玩游戏,化妆为父亲,父亲没有玩游戏的方法
        //fu.playGame();//Cannot resolve method 'playGame()'

        //2.向下转型:把父类类型的变量强制转换为子类类型(强转)
        //儿子卸妆,变化儿子的形态
        Zi zi = (Zi)fu;
        zi.palyGame();//儿子在玩游戏!
        System.out.println("======================================");
        //向下转型的前提必须是多态
        Fu f2 = new Fu();
        //ClassCastException: com.itheima.demo18duotai.Fu cannot be cast to com.itheima.demo18duotai.Zi
        //Zi z2 = (Zi)f2;//类型转换异常:Fu类型不能转换为Zi
        System.out.println("======================================");
        Animal a = new Cat();//向上转型
        Cat c = (Cat)a;//向下转型
        c.catchMouse();
        //ClassCastException: com.itheima.demo17duotai.Cat cannot be cast to com.itheima.demo17duotai.Dog
        //Dog d = (Dog)a;//类型转换异常:猫不能转换为狗的类型
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旭子在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值