5

Meeting クラスがあり、Meeting を拡張する BusinessMeeting クラスを作成したいと考えています。

これは私のミーティングクラスです:

public class Meeting {

private String name;
private String location;
private int start, stop;

public Meeting(String name, String location, int start, int stop) {

    this.name = name;

    this.location = location;

    this.start = start;

    this.stop = stop;

}

これは私のBusinessMeetingクラスです:

public class BusinessMeeting extends Meeting {

    public BusinessMeeting() {

        super();

    }

}

私の BusinessMeeting クラスで、次のエラーが表示されます。

クラス Meeting のコンストラクター Meeting は、特定の型には適用できません。必須: String,String,int,int 見つかりました: 引数なし

なぜそのエラーメッセージが表示されるのか、よくわかりません。BusinessMeeting クラスは、Meeting クラスからすべての変数を継承するべきではありませんか?

4

7 に答える 7

6
public class Meeting {
    public Meeting(String name, String location, int start, int stop) {

        this.name = name;

        this.location = location;

        this.start = start;

        this.stop = stop;

    }
}

BusinessMeetingここで、クラスを で拡張したいとしますbusinessId

public class BusinessMeeting {
    private Integer businessId;

    public BusinessMeeting(String name, String location, int start, int stop, int business) {
        // because super calls one of the super class constructors(you can overload constructors), you need to pass the parameters required.
        super(name, location, start, stop);
        businessId = business;
    }
}
于 2013-10-21T18:16:26.700 に答える
5

作成したコンストラクターは 4 つの引数を受け入れ、引数なしで呼び出します。パラメータなしで初期化する場合は、空のコンストラクタを次のように追加しますMeeting

 public Meeting(){}
于 2013-10-21T18:09:02.357 に答える
2

空の引数でスーパー クラス コンストラクターを呼び出しています。

public BusinessMeeting() {
        super();   
    }

しかし、あなたのスーパークラスにはコンストラクターがあります: Meeting(String, String, int, int).

super()を使用すると、スーパークラスの引数なしコンストラクターが呼び出されます (存在する場合)。super(parameter list)を使用すると、一致するパラメーター リストを持つスーパークラス コンストラクターが呼び出されます。したがって、空の引数を持つコンストラクターを Meeting に追加するpublic Meeting(){}必要があるか、呼び出す必要があります。super(String, String, int, int)

public class Meeting {
// your variable declaration
   public Meeting(String name, String location, int start, int stop) {
    // your assignment 
   }
   public Meeting(){}
}

public class BusinessMeeting extends Meeting {
    public BusinessMeeting()
    {
      // super(); un-comment if you need to check by commenting below
       super("name", "loc", 1, -1);
    }
}

チェックアウト:キーワード super の使用

于 2013-10-21T18:15:17.233 に答える
1

コンストラクターを宣言することにより、Meetingクラスには引数が0のコンストラクターがありません。これは、で呼び出そうとしているものですsuper();。スーパー クラスで使用可能なコンストラクターと一致するスーパー コンストラクターを呼び出す必要があります。

これを修正するには、引数が 0 のコンストラクターをMeetingクラスに追加するか、既存の引数が 4 つのコンストラクターを呼び出します。

于 2013-10-21T18:09:45.770 に答える
1

アルファシンが述べたように、コンストラクターを作成しました。標準では、他のコンストラクターが定義されていない場合、このコンストラクターが作成されると規定されています。super() を呼び出したい場合は、パラメーターなしのコンストラクターを自分で作成する必要があります。

于 2013-10-21T18:10:36.110 に答える
1

はいといいえ。変数の宣言方法によって異なります。

スーパークラスのプライベート変数は、サブクラスからアクセスできません。通常、保護された getter メソッドと setter メソッドをスーパークラスに追加します。これらのメソッドをサブクラスで使用して、変数にアクセスできます。(時々ずさんな方法は、変数自体を保護されていると宣言することです)

サブクラスは、親クラスのプライベート メンバーを継承しません。ただし、スーパークラスにプライベート フィールドにアクセスするためのパブリック メソッドまたはプロテクト メソッドがある場合、これらはサブクラスでも使用できます。Java 継承 Web ページ

しかし、あなたが言及したエラーに関して:あなたは電話していsuper()ます。これは、スーパークラスのデフォルト コンストラクターを呼び出していることを意味します。スーパークラスに独自のコンストラクターを記述したため、デフォルトのコンストラクターはありません。後者は、コンストラクターを定義しない場合にのみ作成されます。

したがって、スーパークラスのコンストラクターを呼び出すとき (あなたの場合は 4 つの引数を取ります)、これらの引数を次のsuper()ように渡す必要があります。

super("a name", "a location", 0, 1)

于 2013-10-21T18:16:35.373 に答える
0

会議クラスに空のパラメーターを持つコンストラクターを追加するか、BussinessMeeting クラスの super() の代わりに super(name,location,start,stop) を呼び出すことができます

于 2013-10-21T18:11:16.843 に答える