Java 创建类层次结构时,组成层次结构的类的构造函数的调用顺序是什么?
我正在研究java中的多级继承,并坚持这个概念:在类层次结构中,构造函数是按派生顺序调用的,从超类到子类。 我试着在谷歌上寻找合适的解释,但没有令人满意的结果Java 创建类层次结构时,组成层次结构的类的构造函数的调用顺序是什么?,java,oop,Java,Oop,我正在研究java中的多级继承,并坚持这个概念:在类层次结构中,构造函数是按派生顺序调用的,从超类到子类。 我试着在谷歌上寻找合适的解释,但没有令人满意的结果 请举例说明,这真的很有帮助我想当你把它明确化时,这是很明显的: class A { A() { System.out.println("3"); } } class B extends A { B(String foo) { super(); System.out.println(
请举例说明,这真的很有帮助我想当你把它明确化时,这是很明显的:
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(…)
始终是第一条指令。尽管发生了这样的事情:
newc(“foo”)
将调用C
构造函数C
构造函数中的第一行将调用超级构造函数(B
)B
调用构造函数B
构造函数中的第一行将调用超级构造函数(A
)调用构造函数(打印3
)
A
构造函数的所有行都完成时,它将把控制权返回到B
构造函数B
构造函数将在调用super
后执行所有行(打印2
+foo
)C
构造函数C
构造函数将在调用super
后执行所有行(打印1
)它基本上与从方法内部调用方法或调用超级方法相同。唯一的区别是,在执行任何其他代码之前,必须调用超级构造函数。这是您可以自己轻松测试的。据猜测,我认为它是从
对象开始向下移动的,但我没有尝试。我尝试在谷歌上寻找合适的解释,但没有令人满意的内容。
。你可能会找到有用的阅读资料