为何程序输出为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
相关产品推荐
相关产品推荐

