ClassCastException:类型转换异常(多态向下转型)
//错误代码
/* ClassCastException:类型转换异常
一般在多态的向下转型中容易出现
*/
class Animal{
public void eat() {
System.out.println("eat");
}
}
class Cat extends Animal{
public void eat() {
System.out.println("猫吃鱼");
}
public void play() {
System.out.println("猫玩毛线");
}
}
class Dog extends Animal{
public void eat() {
System.out.println("狗吃肉");
}
public void method() {
System.out.println("狗玩球");
}
}
public class FinalTestDemo1 {
public static void main(String[] args) {
Animal a = new Dog();
Dog d = (Dog)a;
d.eat();
d.method();
a = new Cat();
Cat c = (Cat)a;
c.eat();
c.play();
//报错:ClassCastException:类型转换异常
//是因为上一级堆中存的是Cat的地址,而dog不能访问cat类,必须要重新创建对象
Dog dd = (Dog)a;
}
}
//正确代码
class Animal{
public void eat() {
System.out.println("eat");
}
}
class Cat extends Animal{
public void eat() {
System.out.println("猫吃鱼");
}
public void play() {
System.out.println("猫玩毛线");
}
}
class Dog extends Animal{
public void eat() {
System.out.println("狗吃肉");
}
public void method() {
System.out.println("狗玩球");
}
}
public class FinalTestDemo1 {
public static void main(String[] args) {
Animal a = new Cat();
Cat c = (Cat)a;
c.eat();
c.play();
a = new Dog();
Dog d = (Dog)a;
d.eat();
d.method();
Dog dd = (Dog)a;
dd.eat();
dd.method();
}
}
运行结果:
猫吃鱼
猫玩毛线
狗吃肉
狗玩球
狗吃肉
狗玩球
内存图解