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

サブクラスコンストラクターでは、宣言しなかった1つの引数のスーパークラスコンストラクターを呼び出します。スーパークラスに追加A(String firstName) { this.firstName = firstName; }します。または、 Bのコンストラクターで行super(firstName);をに置き換えます。setFirstName(firstName);

于 2012-11-05T19:53:52.210 に答える
1

まず、文字列を引数として取るクラス a にコンストラクターがなく、ur サブクラス コンストラクターから super(first name) を呼び出そうとしています。

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