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里特有的方法

 

所以这里要用到向下转换

 

posted @ 2019-07-16 10:48  AxeBurner  阅读(1107)  评论(0编辑  收藏  举报