public class Car {
private final int numberOfDoors;
public Car(int doors) {
numberOfDoors = doors;
}
public Car() {
this(4); // default is 4 doors, calls the constructor above
}
}
在Java中,当你用new示例化任何对象时,比如**C c = new C();**它委托其超类构造函数先创建它。
So in your case new C() --> Delegates to --> B() --> Delegates to A()
So execution flow is as below:
1) A() will Prints : 2
2) B() will calls B(1 ) prints 3 and control return to B() constructor
3) B() will prints : 4
4) C() will prints : 6
I hope it is now clear
5条答案
按热度按时间8dtrkrch1#
构造函数(对于除java.lang.Object之外的每个类)必须以“super”或“super”开头()",以调用其超类的“构造函数”,或“this()",以调用同一个类的另一个构造函数。如果在构造函数中不包含这两个构造函数中的任何一个,则编译器将插入对super的调用().构造函数可以从调用同一个类中得另一个构造函数开始,只要最终调用类中得构造函数时调用超类构造函数即可.
pvcm50d12#
我不认为你是对的,或者我不理解这个问题。来自Java语言规范:
如果构造函数体不以显式构造函数调用开始,并且被声明的构造函数不是原始类Object的一部分,则编译器隐式地假定构造函数体以超类构造函数调用“super();“,调用其不带参数的直接超类的构造函数。
这样的构造函数可以以
this(...)
开头,它调用同一个类的另一个构造函数。只有当调用的构造函数不是以this(...)或super(...)开头时,才会自动调用super()。我想说的是,在构造一个对象之后,super(...)已经被调用(如果类不是java.lang.Object)。
vxbzzdmp3#
这里,使用
this(...)
的或多或少的实际例子s3fp2yjn4#
构造函数体中的第一条语句应该是this或super,如果没有任何内容,则编译器默认保留super()关键字(不带参数)。因此构造函数体以如下方式执行:
1.执行将发生在this或super关键字的基础上,则
1.它将执行所有IIB(作为自上而下方法),然后
1.它将执行程序员保存的所有语句(如SOP、初始化)
输出量:
fbcarpbf5#
在Java中,当你用new示例化任何对象时,比如**C c = new C();**它委托其超类构造函数先创建它。