Lup*_*iyo 4 java enums class object
我写了一个测试类,我正在尝试枚举类型:
public class EnumTest {
enum Car{MERCEDEZ, FERRARI};
public static void main(String[] args) {
Car carObj;
carObj.run();
}
}
Run Code Online (Sandbox Code Playgroud)
所以似乎我可以使用枚举 "声明"一个类(因为我的包中没有类Car),我把方法run()
看看会发生什么.在那之后,我run()
按照IDE的建议写了我的身体,但也在枚举中.
enum Car {
MERCEDEZ, FERRARI;
public void run() {
}
};
Run Code Online (Sandbox Code Playgroud)
我觉得这很奇怪,但还可以.我继续我的弗兰肯斯坦实验并试图用main上的构造函数初始化对象.
enum Car {
MERCEDEZ, FERRARI;
public void run() {
// TODO Auto-generated method stub
};
Car(){}
};
Run Code Online (Sandbox Code Playgroud)
Car carObj = new Car();
Run Code Online (Sandbox Code Playgroud)
它说我无法实例化类型EnumTest.Car,所以我的测试已经完成,但有疑问.对不起,如果它看起来很傻,但我没有在我的搜索中找到这个.
问题:为什么我可以将汽车'像'一类,但我不能初始化它?
您无法enum
使用new
关键字实例化,因为枚举的构造函数始终是私有的.
枚举构造函数是隐式私有的,就像隐式公开的接口方法一样.
JLS的相关部分指出:
如果没有为普通类的构造函数指定访问修饰符,则构造函数具有默认访问权限.
如果没有为枚举类型的构造函数指定访问修饰符,则构造函数为
private
.它是一个编译时间错误,如果枚举类型(§8.9)的构造被声明
public
或protected
.
你只需要以这种方式思考它,枚举基本上是一组值,所以它的构造函数必须是私有的,否则有人会实例化它并创建更多的值从而破坏它的整个目的.
希望能帮助到你.
归档时间: |
|
查看次数: |
95 次 |
最近记录: |