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里特有的方法
所以这里要用到向下转换