Я новичок в java, и уже второй раз пишу на ней код. У меня есть ошибка о том, что общедоступный тип EngineType должен быть определен в собственном файле. EngineType — это тип перечисления, и я упомянул его вне класса Car, с моей точки зрения ориентированного программирования, как бывшего студента C++, все должно быть в порядке. Не могли бы вы посмотреть на мой код и помочь мне? Большое спасибо за ваше желание помочь мне.
package ro.ase.classes1;
import ro.ase.interfaces1.mobility;
public final class Car extends vehicle implements mobility,Cloneable
{
public final int maxNbofkm=1_000_000;
public Enginetype Enginetype;
private float speed;
public Car()
{
super();//it s mandatory to be on first line of the constructor
Enginetype=Enginetype.gas;
speed=0;
}
public Car(String _name,Enginetype _enginetype,float _speed)
{
super(_name,true);//call the base constructor
Enginetype=_enginetype;
speed=_speed;
}
@Override
public void DisplaySpeed() {
System.out.println(String.format("The %s car runs with %f km/h", Enginetype.toString(),speed ));
}
@Override
public void Start() {
}
@Override
public void Stop() {
System.out.println("The"+Enginetype.toString()+"car has stopped");
}
}
enum Enginetype{gas, diesel,hybrid,electric}
Либо сделайте EngineType не-public, переместите его в собственный файл с правильным именем, либо сделайте его членом класса Car.
В Java вам не разрешено объявлять более одного класса верхнего уровня в файле (класс верхнего уровня должен иметь то же имя, что и файл java, в котором он объявлен). Если вы хотите объявить больше классов в одном файле, вы должны использовать вложенные классы. docs.oracle.com/javase/tutorial/java/javaOO/nested.html
Амит Бера, это не работает, я пытался сделать как класс, так и перечисление общедоступными, и ошибка все еще существует.
@Corina У вас должно быть только один из них общедоступными.
Не размещайте текст/код как изображение/ссылку (больше информации). Используйте опцию редактировать, чтобы исправить сообщение.




Проблема в том, что ваш класс Enum определен как общедоступный за пределами вашего класса Car — наличие двух общедоступных классов в одном файле не допускается в Java.. Поэтому вы можете исправить это одним из трех способов:
Например:
Дело 1:
public class VowelPrint {
public static void main(String[] args) {
System.out.println(Vowels.A);
}
}
enum Vowels {
A, B, C;
}
Случай 3:
public class VowelPrint {
public enum Vowels { //Can also be private
A, B, C;
}
public static void main(String[] args) {
System.out.println(Vowels.A);
}
}
Пожалуйста, не связывайте изображение кода. Разместите код здесь. Однако вы получаете ошибку компиляции, поскольку в одном файле в java может быть только один общедоступный класс. Но в вашем случае вы сделали Car и EngineType общедоступными.