You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java类型转换问询:将Tree向下转为Redwood会抛出ClassCastException吗?

代码运行时的异常分析

咱们一步步拆解这段代码的执行过程,看看会发生什么:

  1. 程序启动后,main方法里创建Redwood实例并调用go()方法。
  2. go()方法会先后两次调用go2():
    • 第一次调用go2(new Tree(), new Redwood()):
      进入go2方法后,执行Redwood r2 = (Redwood)t1;这行代码。这里t1的实际类型是Tree(父类),而我们试图把它强制转换成子类Redwood。Java里父类对象不能直接转成子类类型(除非这个父类对象实际就是子类的实例),所以这一步会直接抛出**ClassCastException**异常,程序终止。
    • 第二次调用根本不会执行:因为第一次调用已经抛出异常,程序流程被中断了。不过就算能走到第二次调用,go2((Redwood) new Tree(), new Redwood())里的(Redwood) new Tree()在运行时同样会抛出ClassCastException,原因和上面一样——实际对象是Tree,没法转成Redwood。

补充个小知识点:这种父转子的强制转换,编译阶段编译器只会检查类型间的继承关系(因为Redwood继承自Tree,所以编译能通过),但运行时会检查对象的实际类型,不匹配就抛异常。

内容的提问来源于stack exchange,提问作者Cian Barrett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:31:50