【发布时间】:2016-04-02 00:07:56
【问题描述】:
我有以下两门课
public class classA {
classA() {
System.out.println("A");
}
}
class classB extends classA {
classB() {
System.out.println("B");
}
}
然后运行
1
classA c = new classB();
或
2
classB c = new classB();
总是给予
A
B
为什么会这样?乍一看,在任何一种情况下,我都会假设只有 classB 构造函数会被调用,因此唯一的输出是
B
但这显然是错误的。
【问题讨论】:
-
请注意,对于类,您应该使用 Java 标准命名约定,例如
ClassA和ClassB。以小写字符开头的名称表示变量。 -
"我假设只有
classB构造函数会被调用,因此唯一的输出是B" 但是classB的构造函数会打印A... -
@totymedli 感谢您指出这一点。我让他们换了
-
据我所知,在哺乳动物的世界中,祖先通常是在其后代之前构建的。可能 Java 原始设计者模仿了相同的行为。
-
@ThorbjørnRavnAndersen 它们通常也用于非构造方法。
标签: java inheritance superclass default-constructor