Enum Java中的私有成员

Enum Java中的私有成员,java,enums,Java,Enums,产出:1 如果1是枚举中的私有成员,为什么会显示它?外部类可以完全访问其内部类的成员变量,因此 i在Test类中可见 相反,如果MyEnum在Test类之外,编译器会抱怨i的可见性,它是(i)在同一类(MyEnum)中引用的成员字段;没有访问修饰符可以阻止这种情况-在i上定义的私有访问修饰符将阻止它在此类之外的可见性。 vlaueA被认为是一个静态变量,因此您可以在MyEnum中调用它,因为 相同的enum与类相同,因此MyEnum可以访问valueA,可以访问i的外部类将有权访问内部类成员,即

产出:1


如果1是枚举中的私有成员,为什么会显示它?

外部类可以完全访问其内部类的成员变量,因此
i
Test
类中可见

相反,如果
MyEnum
Test
类之外,编译器会抱怨
i
的可见性,

它是(i)在同一类(MyEnum)中引用的成员字段;没有访问修饰符可以阻止这种情况-在i上定义的私有访问修饰符将阻止它在此类之外的可见性。
vlaueA
被认为是一个静态变量,因此您可以在
MyEnum
中调用它,因为
相同的
enum
与类相同,因此
MyEnum
可以访问
valueA
,可以访问
i
的外部类将有权访问内部类成员,即使它是私有的,因为您已在外部类中定义了
main
方法。

从包含类型到允许嵌套类型,请参见

按惯例查看,枚举始终为大写!private表示仅对类可见,但这正是您所拥有的。
public class Test {

    public static enum MyEnum {
        valueA(1),valueb(2),valuec(3),valued(4);
        private int i;
        private Object o;

        private MyEnum(int number) {
             i = number;
        }

        public void set(Object o) {
            this.o = o;
        }

        public Object get() {
            return o;
        }


     } 

    public static void main(String[] args) {
        System.out.println(MyEnum.valueA.i); // private
    }
}