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

向上转型基于对象引用类型还是实际对象类型?Java类型转换疑问

类型转换问题分析

首先明确UML对应的类继承/实现关系:

  • InterfaceA为顶层接口
  • ClassA实现了InterfaceA接口
  • ClassB继承自ClassA

代码逐行校验(假设ClassB为非抽象类)

InterfaceA obj = new ClassB();
ClassA obj2 = obj;
  • 第一行代码合法:ClassB通过继承ClassA间接实现了InterfaceA,接口引用指向实现类实例属于自动向上转型,编译、运行均无报错。
  • 第二行代码编译阶段直接报错:编译期仅识别变量的引用类型,此时obj的引用类型为InterfaceA,将InterfaceA类型引用赋值给ClassA类型变量属于向下转型,必须显式声明强制转换,修改为ClassA obj2 = (ClassA) obj;才可通过编译。
    • 若添加强制转换后,运行阶段可正常执行:obj指向的实际对象为ClassB实例,ClassB是ClassA的子类,类型兼容,不会抛出ClassCastException运行时异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:54:05