在java中调用构造函数

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.请帮我弄清楚,我是否误解了上一段.?

Per*_*ror 5

不,答案是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)'

  • @Bhavik:不,你错了.请返回[Java school banks](http://docs.oracle.com/javase/tutorial/java/IandI/super.html). (3认同)