我正在研究 java 中的多级继承并坚持这个概念:在类层次结构中,构造函数按派生顺序调用,从超类到子类。 我试着在谷歌上寻找正确的解释,但没有令人满意的。
请举例说明,很有帮助
答案 0 :(得分:-1)
我想当你明确表示时很明显:
class A {
A() {
System.out.println("3");
}
}
class B extends A {
B(String foo) {
super();
System.out.println("2" + foo);
}
}
class C extends B {
C(String foo) {
super(foo);
System.out.println("1");
}
}
在使用这些显式构造函数调用时,您可以看到 super(...)
是总是第一条指令。虽然这是发生的事情:
new C("foo");
将调用 C
构造函数C
构造函数中的第一行将调用超级构造函数 (B
)B
构造函数被调用B
构造函数中的第一行将调用超级构造函数 (A
)A
构造函数被调用(打印 3
)A
构造函数的所有行都完成后,它会将控制权返回给 B
构造函数B
构造函数将执行 super
调用后的所有行(打印 2
+ foo
)C
构造函数C
构造函数将执行 super
调用后的所有行(打印 1
)当您不创建显式构造函数时,此代码仍将以完全相同的顺序运行。
与从方法内部调用方法,或调用超级方法基本相同。唯一的区别是,您必须在执行任何其他代码之前调用超级构造函数。