在java中转换类时抛出异常类

时间:2014-03-09 16:12:02

标签: java

class Animal { 
    public String noise() { 
        return "peep"; 
    }
}
class Dog extends Animal {
    public String noise() { 
        return "bark"; 
    }
}
class Cat extends Animal {
    public String noise() { 
         return "meow"; 
    }
}
class jk{
    public static void main(String args[]){ 
        Animal animal = new Dog();
        Cat cat = (Cat)animal;//line 23
        System.out.println(cat.noise());
    }
}

当我编译此代码时,它在第23行显示ClassCastException。我无法理解问题是什么。帮助!!

2 个答案:

答案 0 :(得分:1)

当对象转换为数据类型时,JVM抛出ClassCastException 该对象不是。的实例。

例如

//Compile Error
Integer x = new Integer(10);
String y = (String) x;

//OK
Object x = new Integer(10);
String y = (String) x;

要避免 ClassCastException ,您可以使用 instanceof

Object x = new Integer(10);
 if(x instanceof String)
 {
 String y = (String) x;
 }

我希望你能得到充分理解。谢谢。

答案 1 :(得分:1)

问题是您正在尝试将更具体的类型转换为不太具体的类。更简单地说,猫或狗可以是动物,因此您可以将狗和猫声称为动物,如下所示:

Animal cat = new Cat();
Animal dog = new Dog();

然而,您不能将动物称为猫或狗,因此以下声明无效

Cat cat = new Animal();
Dog dog = new Animal();
Cat cat = new Dog();
Dog dog = new Cat();

原因很简单,那是因为在这种情况下,像猫或狗这样的更具体的类可能有更多的方法/实例变量,在更一般的情况下不存在。动物应该拥有所有动物共有的属性和方法,但猫或狗可能会做一些并非所有动物都可以使用的东西。

在一个坚果shell中,你不能引用带有子类引用的超类对象。