java-多态转型异常案例

本文通过一个具体的案例,探讨了Java中多态对象转型时可能遇到的ClassCastException异常。实例展示了从子类对象转型为父类对象后再强制转换回子类时的错误用法,帮助理解多态转型的正确操作。
摘要由CSDN通过智能技术生成

多肽转型异常案例


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)

猫吃鱼
猫玩捉迷藏


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值