0

我是 Java 新手并编写了这段代码。它有一个简单的类 Box 和两个属性 width 和 length 以及一些功能。

class Box 
{
    private int width;
    private int length;
    Box(int w, int l)
    {
        setWidth(w);
        setLength(l);    
    }
    public void setWidth(int width)
    {
        this.width = width;
    }
    public int getWidth() 
    {
        return width;
    }
    public void setLength(int length)
    {
        this.length = length;
    }
    public int getLength() 
    {
        return length;
    }
    void showBox()
    {
        System.out.print("Box has width:"+width +" length:"+length);
    }
}

class Main {
    public static void main(String[] args) 
    {
        Box mybox = new Box();
        mybox.setLength(5);
        mybox.setWidth(5);
        mybox.showBox();
    }
}

我收到这个错误。我该如何解决?有人可以解释一下吗。

Box.java:30: cannot find symbol
symbol  : constructor Box()
location: class Box
                Box mybox=new Box();
4

4 回答 4

1

您需要定义默认构造函数。

Box()
{
    length=0;
    width=0;
}

在 Java 中发生的情况是,如果您没有创建任何构造函数,那么编译器将自己创建默认构造函数。但是,如果您创建了参数化构造函数并尝试使用默认构造函数而不定义它,那么编译器将产生您得到的错误。

于 2012-02-14T10:43:46.680 回答
1

Box为is定义的唯一构造函数Box(int w, int l)

更改main()为:

Box mybox = new Box(5, 5);
mybox.showBox();

或者更改Box为具有不带参数并初始化width和的构造函数length

于 2012-02-14T10:44:57.740 回答
0

当您定义自定义构造函数时,默认构造函数将不再可用:如果您想使用它,您应该明确定义它。

您可以为以下工作定义两个构造函数

Box(int w, int l)
{
    setLength(l);
    setWidth(w);
}

Box()
{
   //this is the default
}

您现在可以同时使用两者:

new Box()
new Box(w,l)
于 2012-02-14T10:54:31.577 回答
0

或者你只是使用你定义的构造函数并将长度和宽度传递给它......

Box myBox = new Box(4,3);
myBox.showBox();

然后您定义的构造函数使用您传递的 int 值调用方法 setLength() 和 setWidth() 。(在这种情况下,值为 4 和 3)

于 2012-02-14T10:46:07.117 回答