#java
#java
Вопрос:
class Box {
double weight;
double height;
double depth;
Box(Box ob){
weight = ob.weight;
height = ob.height;
depth = ob.depth;
}
Box(double w, double h, double d){
weight = w;
height = h;
depth = d;
}
Box() {
weight = -1;
height = -1;
depth = -1;
}
Box(double len){
weight = height = depth = len;
}
double volume(){
return weight * height * depth;
}
}
public class OverloadConss {
public static void main(String[] args) {
Box mybox1 = new Box (15,20,10);
Box mybox2 = new Box ();
Box mycube = new Box(7);
Box myclone = new Box (mybox1);
double vol;
vol = mybox1.volume();
System.out.println("The volume of the first box: " vol);
vol = mybox2.volume();
System.out.println("The volume of the second box: " vol);
vol = mycube.volume();
System.out.println("The volume of the mycube: " vol);
vol = myclone.volume();
System.out.println("The clone of the mybox1:" vol);
}
}
Когда я компилирую исходный код, я получил сообщение:
Java / Eclipse / Исключение в потоке «main» java.lang.Ошибка NoSuchMethodError: поле.(LBox;)в OverloadConss.main(OverloadConss.java:33)
Комментарии:
1. какая строка является строкой 33? (Я предполагаю, что это: Box myclone = new Box (mybox1); )
2. Ddi вы помещаете весь исходный код (оба класса) в один и тот же файл? Если да, то вы назвали класс
OverloadConss.java
?
Ответ №1:
С вашим кодом нет проблем; я запускаю его без каких-либо ошибок в eclipse. Вывод:
The volume of the first box: 3000.0
The volume of the second box: -1.0
The volume of the mycube: 343.0
The clone of the mybox1:3000.0
Что вы используете для запуска скрипта? Если вы используете eclipse; попробуйте перестроить рабочее пространство или переписать файлы (копировать вставить).
Примечание: я бы использовал что-то подобное для Box.java таким образом, вам нужно изменить только 1 конструктор, если вы измените структуру данных.
class Box {
double weight;
double height;
double depth;
Box(Box ob){
this(ob.weight, ob.height, ob.depth);
}
Box(double w, double h, double d){
weight = w;
height = h;
depth = d;
}
Box() {
this(-1, -1, -1);
}
Box(double len){
this(len, len, len);
}
// additional methods
}
Комментарии:
1. Да, то же самое для меня. Работает из Eclipse.
2. Первым конструктором должен быть Box(Box ob){ this(ob.вес, ob.высота, ob.глубина);}
3. Ну, я использую Eclipse в качестве IDE, но, похоже, у меня та же проблема.
4. то же самое с netbeans. Работает нормально.
Ответ №2:
Вы должны поместить разные классы в разные java-файлы, и это должно сработать.
Комментарии:
1. -1. Нет, в этом нет необходимости. В одном файле может быть несколько классов.
2. Это не всегда верно. Для каждого файла Java может быть только один общедоступный класс. Файл Java может содержать несколько других непубличных классов.
3. @vanje только один общедоступный класс верхнего уровня. Могут быть вложенные общедоступные классы, все в порядке.
4. В этом случае only
OverloadConss
является общедоступным классом, и поэтому оба они могут содержаться в одном файле.5. @Hemal Pandya: Да, вы правы. Вложенные классы также могут быть общедоступными.
Ответ №3:
Если оба класса находятся в одном файле, я не понимаю, как это может произойти. OverloadConss.main
вызывается Box
конструктор, который определен.
Если они находятся в двух отдельных файлах, то я предполагаю, что вы добавили Box.Box(Box)
их недавно и Box.java
после этого не перекомпилировали. Java может получить доступ к некоторому классу Box, поэтому вы не получаете ClassNotFoundException
Лучше всего удалить все .class
файлы и перекомпилировать.