java中编译报错 ClassCastException 是什么原因,如何处理

 

 

 

ClassCastException  表示类型转换异常    

例如:Pet 宠物类   Dog  狗狗类 (继承Pet)  Penguin 企鹅类(继承Pet)

  Dog  dog  =  (Dog)pet  ;  正确  向下转型

  Dog   dog =   (Dog)penguin  ;  错误  向下转型

处理方法:使用  instanceof  进行类型判断,可以避免类型转换异常

    Pet pet = new Dog();

  例:  if(pet  instanceof  Dog){

    Dog dog = (Dog)pet; 

       

    }else if(pet instanceof Penguin){

    Penguin  penguin = (Penguin)pet;

    }

 

 

........class Pet(){

.....

public void print(){

}

......

}

.....Dog extends Pet(){}

 

Pet x = new Dog("哆啦A梦",100,100);

 

补充:   为什么要向下转换?       因为向上转换   例如上面的  Dog 向上转换成Pet    Pet的引用x它就是Pet类型的

   在Dog这个子类有重写父类Pet方法的方法或没重写,  能用x去调用父类的方法 (即使子类并没有显示出来, 但依旧是默默继承了下来),具体化子类      但如果是子类特有的方法  也就是没有重写父类的方法  你就不能直接通过Pet类型x来调用Pet的子类Dog里特有的方法

 

所以这里要用到向下转换

 

转载于:https://www.cnblogs.com/bichen-01/p/11193452.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值