运行 class 测试的输出是什么? (Java,摘要 classes)

What is the output of running class test? (Java, abstract classes)

public class Test {
  public static void main(String[] args) {
    new Circle9();
  }
}

public abstract class GeometricObject {
  protected GeometricObject() {
    System.out.print("A");
  }

  protected GeometricObject(String color, boolean filled) {
    System.out.print("B");
  }
}
public class Circle9 extends GeometricObject {
  /** Default constructor */
  public Circle9() {
    this(1.0);
    System.out.print("C");
  }

  /** Construct circle with a specified radius */
  public Circle9(double radius) {
    this(radius, "white", false);
    System.out.print("D");
  }

  /** Construct a circle with specified radius, filled, and color */
  public Circle9(double radius, String color, boolean filled) {
    super(color, filled);
    System.out.print("E");
  }
}

一个。 ABCD

乙。 BCD

C。 CBAE

D. BEDC

正确答案是 BEDC 但我不知道怎么做。在 Circle9 class 的构造函数中,不应该有一个隐含的无参数调用 super() 意味着前面应该有一个 A 吗?

看看你在叫什么,顺序是什么:

来玩个换人小游戏, 你正在调用 new Circle9(); 变成

 this(1.0);
 System.out.print("C");

this(1.0) 是 class Circle9 中的另一个构造函数,因此我们可以将其替换为:

this(radius, "white", false);
System.out.print("D");
System.out.print("C");

this(radius, "white", false); 和上面一样,它是另一个构造函数,在我们替换这个调用之后我们有

super(color, filled);
System.out.print("E");
System.out.print("D");
System.out.print("C");

这个 super(color, filled); 是对 superclass 构造函数的显式调用,所以在我们替换代码后我们有

super();
System.out.print("B");
System.out.print("E");
System.out.print("D");
System.out.print("C");

super() 是对 Object class 的构造函数的隐藏调用,打印语句生成输出 BEDC

希望对您有所帮助

因为您正在调用带有参数的显式父构造函数,因此默认 super() 的隐式调用将被忽略。