1

我正在学习 Java,并遇到了构造函数链接的概念。所以我写了一个简单的程序来演示。有两个类-父类(SuperClass)和扩展父类的子类(ChildClass)。

public class SuperClass {
    int x;
    SuperClass(){
        this(10);
        System.out.println("No arg SuperClass Constructor");
    }
    
    SuperClass(int x){
        this.x = x;
        System.out.println("1 arg SuperClass Constructor" + this.x);
    }
}

public class ChildClass extends SuperClass{
    ChildClass(){
        this(10);
        System.out.println("No arg ChildClass Constructor");
    }
    
    ChildClass(int x){
        System.out.println("1 arg ChildClass Constructor" + x);
    }
    
    public static void main(String[] args) {
        ChildClass c = new ChildClass();
    }
}

所以我得到了这个输出:

1 arg SuperClass Constructor10
No arg SuperClass Constructor
1 arg ChildClass Constructor10
No arg ChildClass Constructor

我只是稍微调整了我的代码,因为我想使用 super 关键字,我尝试了下面的代码。

public class SuperClass {
    int x;
    SuperClass(){
        this(10);
        System.out.println("No arg SuperClass Constructor");
    }
    
    SuperClass(int x){
        this.x = x;
        System.out.println("1 arg SuperClass Constructor" + this.x);
    }
}

public class ChildClass extends SuperClass{
    ChildClass(){
        this(10);
        System.out.println("No arg ChildClass Constructor");
    }
    
    ChildClass(int x){
        super(x); //Here added a super method
        System.out.println("1 arg ChildClass Constructor" + this.x);
    }
    
    public static void main(String[] args) {
        ChildClass c = new ChildClass();
    }
}

现在我得到如下输出,

1 arg SuperClass Constructor10
1 arg ChildClass Constructor10
No arg ChildClass Constructor

为什么我super()在第二个程序中使用时没有调用父级的默认构造函数?

4

0 回答 0