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

为何程序输出为BEDC而非ABCD?A未被打印的原因是什么?

Java构造函数调用顺序解析:为什么输出是"BEDC"而非"ABCD"

先理清楚new Circle9()触发的构造方法调用链:

  • 调用Circle9()无参构造时,第一行this(1.0)直接跳转到Circle9(double radius)构造;
  • 在Circle9(double radius)里,第一行this(radius, "white", false)又跳转到Circle9(double, String, boolean)构造;
  • 这个构造的第一行是super(color, filled),调用父类GeometricObject的带参构造,此时打印字符B;
  • 父类带参构造执行完,回到子类构造执行System.out.print("E"),打印E;
  • 回到Circle9(double radius)构造,执行System.out.print("D"),打印D;
  • 最后回到Circle9()无参构造,执行System.out.print("C"),打印C;

所以最终输出是BEDC。

至于字符"A"没被打印的原因:
Java里,子类构造如果没显式调用父类构造,编译器会自动在第一行插入super()(调用父类无参构造)。但如果子类构造显式调用了父类的带参构造(比如这里的super(color, filled)),就不会再触发父类的无参构造。你的代码里父类的无参构造GeometricObject()根本没被执行,自然不会打印"A"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:10:48