问答

如何将一个类自动转型其本来的类型

作者:admin 2021-09-23 我要评论

比如说一个类 public class Father { } public class Son extends Father { } Father son = new Son(); (Son)son; 最后的son需要做一次向下转型。 但是向下转型...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

比如说一个类

public class Father {  
  
}  
  
  
public class Son extends Father {  
}  
  
  
Father son = new Son();  
  
(Son)son;

最后的son需要做一次向下转型。
但是向下转型必须要指明对应的子类,有没有什么办法可以不需要显示的指明,直接将son转换成对应的Son类型呢?

###

这个强制转换必须要显式指明。
假设有下面三个类:

public abstract class Animal {}

public class Dog extends Animal {
    // 狗吃肉
    public void eatMeat() {}
}

public class Cat extends Animal {
    // 猫吃鱼
    public void eatFish() {}
}

Animal 为 抽象类,看下面代码:

Animal animal = ...;

你不显式的话,根本不知道这个animal是个什么?要想转换成具体子类,并进行相应的操作:

if(animal instanceof Dog) {
    ((Dog)animal).eatMeat();
}else if(animal instanceof Cat){
    ((Cat)animal).eatFish();
}
###

没有
最多手工 instantof 接强转

###

这个只能强转了,没有其它方法了。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 如何将一个类自动转型其本来的类型

    如何将一个类自动转型其本来的类型

  • springboot中不能用SpEL获取properties

    springboot中不能用SpEL获取properties

  • Vue-cli创建的项目如何在bulid时不压缩

    Vue-cli创建的项目如何在bulid时不压缩

  • useState 页面后退如何保持状态?

    useState 页面后退如何保持状态?

腾讯云代理商
海外云服务器