-3

您好,我正在尝试从扩展其超类及其构造函数 super 的类中实例化一个对象,但在 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

您正在定义两个构造函数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构造函数之一或另一个新创建的不带参数的构造函数。

BoxWeight() {
    super(...)
}

如果您习惯于在没有实际定义的情况下调用无参数构造函数,这是因为 Java 提供了默认构造函数,但前提是您自己不定义任何构造函数。有关详细信息,请参阅此页面。

于 2013-07-07T21:24:39.637 回答