ClassCastException异常(类型转换异常)

本文探讨了在Java中遇到ClassCastException异常时,尤其是接口之间的转换问题。即使没有继承关系,接口间的强制转换也可能导致此类异常。建议使用if + instanceof运算符进行安全的向下转型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识点:

  1. 接口和接口之间在进行强制转换时,无论是向上还是向下转型,没有继承关系也可以强转。
  2. 向下转型最好用if + instanceof运算符进行判断
错误提示:

在这里插入图片描述

D:\Java\Java进阶\异常集>java ClassCastException
Exception in thread “main” java.lang.ClassCastException: class C cannot be cast to class B (C and B are in unnamed module of loader ‘app’)
at ClassCastException.main(ClassCastException.java:9)

代码演示:
public class ClassCastException
{
	public static void main(String[] arg)
	{
		//多态:父类型A引用a指向子类型C的对象
		A a = new C();
		//测试出:接口和接口之间在进行强制转换时,没有继承关系也可以强转
		//编译不会出现问题,运行可能会出现ClassCastException异常。
		//B b = (B)a;//编译不出错,运行出错。
		
		//修改后
		//当遇到需要向下转型时:用if 和instanceof进行判断两者之间是否有关联。
		//这样可以避免异常出现
		if(a instanceof B)
		{
			B b = (B)a;
		}
		
	}
}
//A接口(完全抽象类)
interface A
{
}
//B接口(完全抽象类)
interface B
{
}
//继承A接口的类C,接口继承用implements
class C implements A
{
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值