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

Java/C#面向对象编程练习:类继承关系判断求助

拆解Java代码中的类继承关系

哈哈,这个问题我之前帮好几个开发者梳理过,咱们逐行拆解代码,结合面向对象的转型规则就能搞清楚啦!

逐行分析代码逻辑

咱们基于Java的向上/向下转型规则来推导:

  • 第一行:C c = new A();
    在Java中,只有父类引用可以直接指向子类对象(向上转型,无需强制转换)。这段代码没有强制转换却能合法编译,说明A是C的子类——也就是 A继承自C。如果是C继承自A,那把父类对象赋值给子类引用必须加强制转换,否则直接编译报错,这一步关系就确定了。

  • 第二行:B b1 = (B)(new A());
    这里用了强制类型转换,说明A和B必须属于同一条继承链。结合后面的代码来看,合理的关系是 B继承自A:此时A是B的父类,把父类对象new A()强制转成子类B,编译层面是允许的(虽然运行时会抛ClassCastException,但题目只要求符合编译级别的继承关系)。

  • 第三行:B b2 = new D();
    同样遵循向上转型规则,B的引用能直接指向D的对象,说明 D继承自B——D是B的子类,这一步非常明确。

  • 第四行:A a = new D();
    因为D继承自B,B又继承自A,所以D是A的间接子类,父类A的引用自然能指向子类D的对象,完全符合面向对象的转型规则。

匹配正确选项

对应到给出的选项中,正确答案就是:A继承自C,B继承自A,D继承自B。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:32:46