此代码取自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行被访问,所以我可以看到我的回答是编译失败。但是书中的答案却说不然。我在这里遗漏了什么,还是这本书中的拼写错误?
答案 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)
类似地,内部类可以访问其外部类的私有成员。