类可以访问它的内部类(和内部类的内部类)的所有成员
2008-12-02 16:59
225 查看
对此总是多少有点迷惑——private关键字作用在内部类(假设为A)的成员上时,对于包含该内部类(A)的类(假设为B)来说形同虚设,如果还有一个类(假设为C)包含这个包含类(B)时,那么类A中的private对于C同样形同虚设。
下面的代码证明了这一点。个人理解是:内部类对于 包含它的类 来说毫无隐私——此处包含至少嵌套了一级。
1. class FirstLevel{
2.
3. private class SecondLevel{
4. private int i=10;
5. private void say(){
6. System.out.println("private SecondLevel.say()");
7. }
8. private class ThirdLevel{
9. private int i=12;
10. private void say(){
11. System.out.println("private ThirdLevel.say()");
12. }
13. }
14. }
15.
16. void haha(){
17. System.out.println("FirstLevel.haha() BEGIN:");
18. SecondLevel secondLevel=new SecondLevel();
19. SecondLevel.ThirdLevel thirdLevel=secondLevel.new ThirdLevel();
20. System.out.println("SecondLevel's private i"+secondLevel.i);
21. secondLevel.say();
22. System.out.println("ThirdLevel's private i :"+thirdLevel.i);
23. secondLevel.say();
24. System.out.println("FirstLevel.haha() END./n");
25. }
26.
27. public static void main(String[] arguments){
28. FirstLevel firstLevel=new FirstLevel();
29. firstLevel.haha();
30. FirstLevel.SecondLevel secondLevel=firstLevel.new SecondLevel();
31. secondLevel.say();
32. FirstLevel.SecondLevel.ThirdLevel thirdLevel=secondLevel.new ThirdLevel();
33. thirdLevel.say();
34. }
35. }
下面的代码证明了这一点。个人理解是:内部类对于 包含它的类 来说毫无隐私——此处包含至少嵌套了一级。
1. class FirstLevel{
2.
3. private class SecondLevel{
4. private int i=10;
5. private void say(){
6. System.out.println("private SecondLevel.say()");
7. }
8. private class ThirdLevel{
9. private int i=12;
10. private void say(){
11. System.out.println("private ThirdLevel.say()");
12. }
13. }
14. }
15.
16. void haha(){
17. System.out.println("FirstLevel.haha() BEGIN:");
18. SecondLevel secondLevel=new SecondLevel();
19. SecondLevel.ThirdLevel thirdLevel=secondLevel.new ThirdLevel();
20. System.out.println("SecondLevel's private i"+secondLevel.i);
21. secondLevel.say();
22. System.out.println("ThirdLevel's private i :"+thirdLevel.i);
23. secondLevel.say();
24. System.out.println("FirstLevel.haha() END./n");
25. }
26.
27. public static void main(String[] arguments){
28. FirstLevel firstLevel=new FirstLevel();
29. firstLevel.haha();
30. FirstLevel.SecondLevel secondLevel=firstLevel.new SecondLevel();
31. secondLevel.say();
32. FirstLevel.SecondLevel.ThirdLevel thirdLevel=secondLevel.new ThirdLevel();
33. thirdLevel.say();
34. }
35. }
相关文章推荐
- Java基础-内部类-为什么成员内部类可以无条件访问外部类
- 内部类之设计模式-内部类可以访问外部类的私有成员
- 深入理解Java中为什么内部类可以访问外部类的成员
- 深入理解Java中为什么内部类可以访问外部类的成员
- 深入理解Java中为什么内部类可以访问外部类的成员
- 测试在类的内部是否可以访问对象的私有成员
- 为什么内部类可以访问外部类的成员
- 深入理解Java中为什么内部类可以访问外部类的成员
- 深入理解Java中为什么内部类可以访问外部类的成员
- 深入理解Java中为什么内部类可以访问外部类的成员
- 内部类之设计模式-内部类可以访问外部类的私有成员
- 在内部类中可以访问其外部类的所有域,即使是私有域
- 深入理解Java中为什么内部类可以访问外部类的成员
- 深入理解Java中为什么内部类可以访问外部类的成员
- 深入理解Java中为什么内部类可以访问外部类的成员
- 深入理解Java中为什么内部类可以访问外部类的成员
- 深入理解Java中为什么内部类可以访问外部类的成员
- # 深入理解Java中为什么内部类可以访问外部类的成员#
- 深入理解Java中为什么内部类可以访问外部类的成员
- 理解类级别的访问控制权限——类的成员函数可以访问该类所有对象的私有成员