既然枚举构造函数只能被其常量调用,那么为什么它可以是包私有的?
既然枚举构造函数只能被其常量调用,那么为什么它可以是包私有的?
private
,就像接口方法隐式地继承 public
一样,即使您没有添加关键字也是如此。如果未为普通类的构造函数指定访问修饰符,则构造函数具有默认访问权限。
如果未为枚举类型的构造函数指定访问修饰符,则该构造函数为
private
。如果枚举类型 (§8.9) 的构造函数声明为
public
或protected
,则编译时出错。
这是语言的一个怪异之处:枚举构造函数默认为私有。
有趣的是,如果您声明一个包可见的枚举构造函数,就像这样:
public enum MyEnum {
A(0),
B(1);
private final int i;
MyEnum(int i) {
this.i = i;
}
public int getI() {
return i;
}
}
如果您尝试从包中的另一个类引用它,则会出现编译器错误:
无法实例化类型MyEnum