请阅读以下代码。我一直很容易理解。它不包含任何错误......
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的值。请详细解释。
答案 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);
}
}