Ошибка конструктора в Java - PullRequest
0 голосов
/ 14 февраля 2012

Я новичок в 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 ]

1 голос
/ 14 февраля 2012

Единственный конструктор, определенный для Box, это Box(int w, int l).

Измените main() на:

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

Или измените Box, чтобы иметь конструктор, который не принимает аргументови инициализирует width и length.

1 голос
/ 14 февраля 2012

Вам нужно определить конструктор по умолчанию.

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

В Java случается так, что если вы не создали конструктор, компилятор сам создаст конструктор по умолчанию. Но если вы создали параметризованный конструктор и пытаетесь использовать конструктор по умолчанию, не определяя его, компилятор выдаст ошибку, которую вы получили.

0 голосов
/ 14 февраля 2012

Когда вы определяете пользовательский конструктор, конструктор по умолчанию больше не будет доступен: если вы хотите использовать его, вы должны определить его явно.

Вы можете определить два конструктора, чтобы следующие работали

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

Box()
{
   //this is the default
}

Теперь вы можете использовать оба:

new Box()
new Box(w,l)
0 голосов
/ 14 февраля 2012

Или вы просто используете свой определенный конструктор и передаете ему длину и ширину ...

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

и ваш определенный конструктор затем вызывает методы setLength () и setWidth () с вашими переданными значениями int. (в данном случае со значениями 4 и 3)

...