Rav*_*avi 2 java constructor object superclass
class A {
A() {
System.out.print("A");
}
}
class B extends A {
B() {
System.out.print("B");
}
}
class C extends B {
C() {
System.out.print("C");
}
}
public class My extends C {
My(){
super();
}
public static void main(String[] args) {
My m = new My();
}
}
Run Code Online (Sandbox Code Playgroud)
问题从一个面试问题开始(当用Java创建对象时会发生什么?)
并回答是......
调用派生程度最大的类的构造函数.构造函数做的第一件事是为超类调用构造函数.这个过程一直持续到调用java.lang.Object的构造函数为止,因为java.lang.Object是java中所有对象的基类.在执行构造函数体之前,将执行所有实例变量初始值设定项和初始化块.然后执行构造函数的主体.因此,基类的构造函数首先完成,最派生类的构造函数最后完成.
所以,根据上述说法,答案应该是ABCC,但它只显示ABC.虽然,当我正在评论super()派生的构造函数.然后,输出是ABC.请帮我弄清楚,我是否误解了上一段.?
不,答案是ABC
My m = new My();
Run Code Online (Sandbox Code Playgroud)
上面的第一个调用My class,然后超级调用它的超类,即C类',然后超级调用'B Class is made, then a super call to'A类' , then a Super call to' as all Objects extendjava.lang.Object'java.lang.Object`.
因此答案是ABC
你真的不需要明确地调用super()你的内容,My Class因为编译器会包含它,除非你调用overloaded constructor那个类'this(something)'