1

A类:

public class A {    

    private String firstName;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

B类:

public class B extends A{

    private int billNum;

    B(String firstName, String billNum) {
        super(firstName);
        setBillNum(billNum);

    }

    public int getBillNumr() {
        return billNum;
    }

    public void setBillNum(int billNum) {
        this.billNum = billNum;
    }

1.)现在我想添加一个构造函数一样的默认值B() {},但我不允许这样做。为什么是这样 ?

4

3 回答 3

9

由于 B 中的这一行,您提供的代码无法编译:

super(firstName);

这表明实际上,您的A类有一个这样的构造函数:

public A(String firstName) {
    this.firstName = firstName;
}

那时,尝试在中声明一个新的构造函数B将失败而无需super调用,因为A.

所以这将起作用:

B() {
  super("Anonymous");
}

或者您可以向 A 添加一个无参数构造函数:

A() {
  this("Anonymous");
}

...此时您可以B() {}在 B中使用。

基本上,一旦您了解没有任何显式this(...)super(...)调用的构造函数等同于调用super()(即超类中的无参数构造函数),这一切都是有意义的。

于 2012-11-05T19:54:01.803 回答
4

在子类构造函数中,您调用一个没有声明的单参数超类构造函数。添加A(String firstName) { this.firstName = firstName; }到超类。或者,将B 的构造函数中的行super(firstName);替换为。setFirstName(firstName);

于 2012-11-05T19:53:52.210 回答
1

首先,您在 a 类中没有将字符串作为参数的构造函数,并且您试图从您的子类构造函数中调用 super(first name)。

class A{
String firstName;
public aA(String firstname){
this.firstName= firstName;
}
}
于 2012-11-05T19:55:05.733 回答