关于在java中的类中定义的枚举的问题

时间:2009-05-04 05:49:38

标签: java enums

此代码取自SCJP练习测试:

 3. public class Bridge { 
 4.   public enum Suits { 
 5.     CLUBS(20), DIAMONDS(20), HEARTS(30), SPADES(30), 
 6.     NOTRUMP(40) { public int getValue(int bid) { 
                        return ((bid-1)*30)+40; } }; 
 7.     Suits(int points) {  this.points = points;  } 
 8.     private int points; 
 9.     public int getValue(int bid) { return points * bid; } 
10.   } 
11.   public static void main(String[] args) { 
12.     System.out.println(Suits.NOTRUMP.getBidValue(3)); 
13.     System.out.println(Suits.SPADES + " " + Suits.SPADES.points); 
14.     System.out.println(Suits.values()); 
15.   } 
16. } 

第8行points被声明为私有,第13行被访问,所以我可以看到我的回答是编译失败。但是书中的答案却说不然。我在这里遗漏了什么,还是这本书中的拼写错误?

4 个答案:

答案 0 :(得分:11)

单个外部类中的所有代码都可以访问该外部类中的任何访问级别。

答案 1 :(得分:5)

扩展stepancheg说的话:

来自Java Language Specification section 6.6.1 "Determining Accessibility"

  

如果成员或构造函数是   声明私有,然后访问是   当且仅当它发生时允许   在顶级课程的主体内   包含声明的   成员或构造者。

基本上,private并不意味着对这个类是私有的,它对于顶级类来说是私有的。

答案 2 :(得分:3)

首先查看第12行

  System.out.println(Suits.NOTRUMP.getBidValue(3)); 

getBidValue未定义

答案 3 :(得分:0)

类似地,内部类可以访问其外部类的私有成员。