默认构造函数未被调用

时间:2011-05-19 12:59:23

标签: java

为什么在调用默认构造函数时没有调用默认构造函数(同一个类),但父类的默认构造函数被调用 - 为什么?

class A{
    A(){
        System.out.println("A()");
    }
}

class B extends A{
    B(){
        System.out.println("B()");
    }
}

class C extends B{
    C(){
        System.out.println("C()");
    }
    C(int i){
        System.out.println("<------>"+i);
    }
}
public class sample {
    public static void main(String[] args) {
        C c = new C(8);

    }
}

输出:

A()
B()
<------>8

4 个答案:

答案 0 :(得分:10)

这就是语言的工作方式:每个类只调用一个构造函数,除非你专门从另一个构造函数中调用一个构造函数(如:How do I call one constructor from another in Java?)。

答案 1 :(得分:4)

这是Java的规则。如果你想要你的行为,你必须使用this()作为C(int)中的第一条指令。

答案 2 :(得分:4)

正如之前所说的java的标准行为如果你想在构造对象时总是调用一些代码你可以使用初始化器

class A{
    {
       System.out.println("A()");
    }
    A(){

    }
}

答案 3 :(得分:4)

基于类'C'的类声明,您正在重载构造函数,因此当您创建一个新的'C'对象并使用以下代码传入一个整数时:

C c = new C(8);

您正在调用构造函数

C(int i){
    System.out.println("<------>"+i);
}

而不是构造函数

C(){
    System.out.println("C()");
}

因此它不会打印出“C()”。重载构造函数/函数取决于传入的参数的类型和数量。最重要的是,每个正在创建的对象只调用一个构造函数。