运行 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()
的隐式调用将被忽略。
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()
的隐式调用将被忽略。