调用多个超类构造函数

时间:2014-11-08 12:57:00

标签: java constructor superclass super

请阅读以下代码。我一直很容易理解。它不包含任何错误......

class A {
    private int a;
    private int b;

    A() {
        System.out.println("a and b: " + a + " " + b);
    }

    A(int a, int b) {
        this.a = a;
        this.b = b;
    }
}

class B extends A{
    B(int a, int b) {
        super(a,b);
        super(); // error, "Constructor call must be the first statement in a constructor"
    }
}


public class Construct {

    public static void main(String[] args) {
        A a = new B(3,4);
    }
}

我需要知道在这种情况下如何调用超类A的no-args构造函数?这样我就可以显示a和b的值。请详细解释。

2 个答案:

答案 0 :(得分:0)

您无法从子类构造函数中调用两个超类构造函数。您可以选择从超类的其他构造函数中调用超类A的无参数构造函数。

A(int a, int b) {
    this ();
    this.a = a;
    this.b = b;
}

class B extends A{
    B(int a, int b) {
        super(a,b);
    }
}

答案 1 :(得分:0)

你应该重新思考面向对象的设计。具有较少参数的构造函数调用具有更多参数的构造函数,而不是相反。所以你会这样做:

class A {
    private int a;
    private int b;

    A() {
        this(0, 0);  // default constructor: initialize with some useful default values
    }

    A(int a, int b) {
        this.a = a;
        this.b = b;
        System.out.println("a and b: " + this.a + " " + this.b);
    }
}

class B extends A{
    B(int a, int b) {
        super(a,b);
    }
}


public class Construct {

    public static void main(String[] args) {
        A a = new B(3,4);
    }
}