-3

こんにちは、スーパークラスとそのコンストラクタースーパーを拡張するクラスからオブジェクトをインスタンス化しようとしていますが、Java がインスタンス化されたオブジェクトのコンストラクターで引数を受け入れるのに苦労しています。誰か助けてください、ありがとう! プログラムは次のとおりです。

public class Box {

    double width;
    double height;
    double depth;

    Box(Box ob)
        {
            this.width=ob.width;
            this.height=ob.height;
            this.depth=ob.depth;           
        }
    Box(double width, double height, double depth)
        {
            this.width=width;
            this.height=height;
            this.depth=depth;
        }

    double volume()
        {
            return width * height * depth;
        }


}


public class BoxWeight extends Box{

    double weight;
    BoxWeight(BoxWeight object)
        {
            super(object);
            this.weight=object.weight;
        }
    BoxWeight(double w, double h, double d, double wei)
        {

            super(w,h,d);
            this.weight=wei;
        }

}


public class Proba {


    public static void main(String[] args) {

        BoxWeight myBox1 = new BoxWeight();
        BoxWeight myBox2 = new BoxWeight();

    }
}

これで、メイン クラスの BoxWeight() コンストラクターに引数を渡そうとするたびにエラーが発生します。

4

1 に答える 1

5

あなたは2つのコンストラクタを定義していますBoxWeight

BoxWeight(BoxWeight object)
BoxWeight(double w, double h, double d, double wei)

ただし、パラメーターなしで使用してみてください

BoxWeight myBox1 = new BoxWeight();

したがって、次のようにオブジェクトを構築するときに別のインスタンスを提供する必要があります。

BoxWeight myBox1 = new BoxWeight(someOtherBox);

または、個別に定義された値でコンストラクターを使用します。

BoxWeight myBox1 = new BoxWeight(myWidth, myHeight, myDepth, myWeight);

BoxWeightまたは、既存のBoxコンストラクターの 1 つまたはパラメーターなしで新しく作成された別のコンストラクターのいずれかを呼び出す、引数なしのコンストラクターを定義します。

BoxWeight() {
    super(...)
}

実際に定義せずに引数なしのコンストラクターを呼び出すことに慣れている場合、これは Java がデフォルトのコンストラクターを提供しているためですが、自分でコンストラクターを定義しない場合に限ります。詳しくはこちらのページをご覧ください。

于 2013-07-07T21:24:39.637 に答える