多态中的类型转换异常图解
程序示例
class Animal{
public void eat(){
System.out.println("吃饭");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("狗吃肉");
}
public void lookDoor(){
System.out.println("看门");
}
}
class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
public void catchMouse(){
System.out.println("抓老鼠");
}
}
public class PolymorphicDemo3 {
public static void main(String[] args) {
//多态的形式创建一个对象
Animal a = new Dog();
a.eat();
// 多态访问成员方法的特点
// 编译看左,运行看右。编译的时候Animal类没有lookDoor()方法
// 所以编译出错,多态不能访问子类的特有方法
// a.lookDoor();//不能访问
//向下转型访问子类特有的方法
Dog d = (Dog)a;
d.eat();
d.lookDoor();
//从语法角度来说,没有问题可以这么写
//从运行的角度来看,他报错了。
//java.lang.ClassCastException 类型转换异常(向下转型中容易出现)
Cat c = (Cat)a; //因为此刻的内存中还是一个Dog对象
c.eat();
c.catchMouse();
}
}
类型转换异常图解
![](https://i-blog.csdnimg.cn/blog_migrate/f327cddd1e303c4aa1147626ad7e468c.png)