java-多态转型异常案例

多肽转型异常案例


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)

猫吃鱼
猫玩捉迷藏


你可能感兴趣的:(java基础)