枚举类型“必须在其自己的文件Car.java中定义公用类型EngineType”的Java编译错误

时间:2019-03-09 11:36:03

标签: java oop enums compiler-errors

我是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}

CODE WITH THE ERROR

1 个答案:

答案 0 :(得分:2)

问题是您将Enum类定义为Car类之外的公共类- Java中不允许在一个文件中包含两个公共类。因此,您可以使用以下三种方法之一来解决此问题:

  1. 将枚举设为私有。
  2. 将公共枚举放入单独的文件中。
  3. 将枚举放入Car类中。

例如:

情况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);
    }
}