java向下类型的转换,java温习*(12):多态关于向上(或向下)类型转换的应用问题...

1、向上转型的有什么用处?直接创建子类对象不是更方便?

向上转型的语法:父类类型 父类引用 = new 子类类型(参数);

即:使用父类引用指向子类实例化对象,也称为自动转型或隐式转型。

此时,该引用只能访问子类继承或重写父类的方法,而不能直接访问子类特有的方法。向上转型多适用于,有多个同父子类共同应用的场景,此时,可以借由父类引用,根据实际需要,转型为特定的子类对象实现多态。

譬如:父类Person,有3个子类Chinese、French、Russian,类中分别重写了eat方法

282e3510727d56c811344719d406dd99.png

d27d65ca93ee6c2d737e9779b8d81c9b.png

此时,在测试类中,如果需设置方法实现对各子类eat方法的调用。

方案1:创建eatTest方法,设置参数为父类类型,利用向上转型,在main方法中调用时,分别直接传入子类即可。

f724c381a934c2fc2b3eae239f6eb5be.png

运行结果:

289af653b92b25419b303aca5a6c3cd5.png

方案2:分别设置3个eatTest的重载方法,分别设置参数为:Chinese、French、Russian,main方法不变,运行结果也与方案1相同。

3ed00f984cbfc49adca460eaf51a900a.png

由此可清晰看出,采用向上转型设置的方案更加简单灵活。如后续再新增加新的子类,也无需新增eatTest方法,非常方便。

2、为什么需要向下转型,直接实例化子类不是更简单?

向下转型一般是为了重新获得因为向上转型而丢失的子类特性而存在,因此,通常在向下转型前需要先进行向上转型,向下转型通常也会结合instanceof一起应用。

譬如:修改上一问题中的3个子类Chinese、French、Russian,类中分别新增各自独有的方法。

5f9c498fabda79515ae5b934dd1e1297.png

8af18eae3fa52a50773bc7a9a1e56a49.png

此时如需在测试类eatTest方法中,修改eatTest ,实现针对传入不同的参数分别调用各自独立方法,则可以参考如下代码

647a29ab601f3b4be198af6b698fc5d1.png

由此可见,借由向下转型,可以在灵活应用多态的基础上,同时兼顾子类的独有性,相较于直接创建子类实例,提高了代码加灵活性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值