我有三类:构造函数调用
public class A {
public A(){
System.out.println("in A");
}
}
public class B extends A{
public B(){
System.out.println("in b");
}
}
public class C extends B{
public C(){
System.out.println("in C");
}
}
现在我真的不知道该如何构造函数调用的工作。 如果我实例化C c= new C();
,按什么顺序(以及为什么顺序)构造函数被调用。 如果我实例化类C,那么它不应该只是检查C类是否有任何构造函数,如果它确实,它应该使用它?
它为什么输出 - > In A In B In C?
只有当它没有在它自己的类中找到构造函数时,它不会在层次结构中上升吗?或者超类的构造函数每次都隐式调用?
“实际上A将被首先调用”的措辞是误导性的。 C的构造函数首先被调用,因为您正在初始化类型C的实例。打印顺序是由层次结构中构造函数的控制流引起的,而不是因为A的构造函数被首先调用。 –
@Anthony:我试着在我的答案中解释这个想法,如果你有一个更好的术语,我会很乐意使用它,不幸的是,英语不是我的母语..:\ – amit