【发布时间】:2015-08-12 16:03:23
【问题描述】:
我写了一个测试类,我正在尝试 enum 类型:
public class EnumTest {
enum Car{MERCEDEZ, FERRARI};
public static void main(String[] args) {
Car carObj;
carObj.run();
}
}
所以看来我可以使用 enum 来“声明”一个类(因为我的包中没有 Car 类),然后我将方法 run() 放入其中看看会发生什么.之后,我按照 IDE 的建议编写了 run() 正文,但也在 enum 内。
enum Car {
MERCEDEZ, FERRARI;
public void run() {
}
};
我认为这很奇怪,但没关系。我继续进行我的科学怪人实验,并尝试使用 main 上的构造函数初始化对象。
enum Car {
MERCEDEZ, FERRARI;
public void run() {
// TODO Auto-generated method stub
};
Car(){}
};
Car carObj = new Car();
它说我不能实例化 EnumTest.Car 类型,所以我的测试完成了,但有疑问。对不起,如果这看起来很愚蠢,但我在搜索中没有找到这个。
问题:为什么我可以使用 Car 'like' 一个类,但我不能初始化它?
【问题讨论】:
-
枚举类型的构造函数必须是包私有或私有访问。它会自动创建在枚举体开头定义的常量。您不能自己调用枚举构造函数。 docs.oracle.com/javase/tutorial/java/javaOO/enum.html
-
您的误解来自不知道Java中引用是如何初始化的。
Car carObj;- 这不会初始化任何东西,无论enum是类还是枚举。