2013-03-09 156 views
4
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 
    } 
} 

输出:1私有成员

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

+1

参见http://stackoverflow.com/questions/1801718/why-can-outer-java-classes-access-inner-class -private -member – theon 2013-03-09 16:03:52

+1

按照惯例,枚举总是大写! – 2013-03-09 16:04:05

+1

私人方式只对班级可见,但这正是你所拥有的。 – cara 2013-03-09 16:06:01

回答

4

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

相反,如果MyEnum是外部Test类时,编译器会抱怨的i知名度,

3

它(ⅰ)一个成员字段被同一类(MyEnum)内引用;没有访问修饰符可以防止 - 我定义的私人访问修饰符将阻止它在该类之外的可见性。 Suggested Reading

0

vlaueA被认为是一个静态变量,所以你可以在MyEnum调用它,因为在whice播放相同的类 相同enumi所以MyEnum可以访问valueA可以访问i

0

外部类将有对内部类成员的访问,即使它是私有的,因为您已在外部类中定义main方法。

从含类型嵌套类型