多肽转型异常案例
dsf
一个父类:
package day09;
public class AnimalDemo {
public void eat(){
System.out.println("吃");
}
}
子类1:
package day09;
public class DogDemo extends AnimalDemo{
public void eat(){
System.out.println("狗吃骨头");
}
public void lookdoor(){
System.out.println("狗看门");
}
}
子类2:
package day09;
public class CatDemo extends AnimalDemo {
public void eat(){
System.out.println("猫吃鱼");
}
public void play(){
System.out.println("猫玩捉迷藏");
}
}
测试类:
package day09;
public class DTDemo {
public static void main(String[] args) {
//创建父类对象引用指向子类DogDemo
AnimalDemo a = new DogDemo();
a.eat();//父类对象调用DogDemo类的eat方法
//a.lookdoor();//报错,lookdoor()是DogDemo类的特有方法,不能使用可用以下方法使用
DogDemo d = (DogDemo)a;//对象向下转型,动物-狗
d.lookdoor();
//创建父类对象引用指向子类CatDemo
a = new CatDemo();
a.eat();//父类对象调用CatDemo类的eat方法
//a.play();//报错,play()是CatDemo类的特有方法,不能使用可用以下方法使用
CatDemo c = (CatDemo)a;//对象向下转型,动物-猫
c.play();
//此时程序中的a在内存地址中代表的是CatDemo对象引用
DogDemo dd = (DogDemo)a;//此处会发生类型转换异常
dd.eat();
//虽然程序没有报错,但在执行是就会发生类匹配异常java.lang.ClassCastException
//因为猫的对象引用不能转型给狗,也就是说“猫不是狗”。
}
}
输出:
狗吃骨头
狗看门
Exception in thread "main" java.lang.ClassCastException: day09.CatDemo cannot be cast to day09.DogDemo
at day09.DTDemo.main(DTDemo.java:21)
猫吃鱼
猫玩捉迷藏