JAVA编程之道

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
由于内部类定义在封装类的内部,所以内部类可以在封装类的内部进行访问,也可以在封装类外部进行访问。
 1//Class A为外部类(封装类)B为非静态内部类
 2public class A {
 3  private int a=0;
 4  protected int b=0;
 5  private void outer_method(){
 6      System.out.println("inner class can access all of the outer member"); 
 7  }

 8  private void testInner(){//该方法用于直接访问内部类
 9      B b=new B();
10      b.execute();
11  }

12  class B {//内部类的声明
13      public  int c=0;//内部类成员变量
14      public void execute() {
15          a=10;
16          b=9;
17          outer_method();//访问外部类私有方法
18          System.out.println("a="+a+";"+"b="+b);
19     }

20  }

21  public static void main(String[] args) {
22          A a=new A();
23          a.testInner();  
24  }

25}

26
该例说明以下:
※外部成员变量的作用域是整个外部类,包括内部类,外部类不能访问内部类固有成员
※内部类拥有对外部类所有成员访问权限
※外部类是不可以使用static方法来进行内部类实例话的。
※成员位置的非静态内部类里面是不能用static修饰符的

 1//A.java
 2public class A {
 3private int a=0;
 4protected int b=0;
 5public C inner_method(int w) {
 6 int m;
 7 final int n=0;
 8   class B implements C{  //方法中的内部类
 9        public int c=0;
10        public void execute(){
11           a=10//访问成员变量
12           System.out.println("this is inner class");  
13       }

14   }

15}
 
16public static void main(String[] args){
17  A a=new A();
18  C b=a.inner_method(3);
19  b.execute();
20}
 
21}

22inte***ce C{public void execute();}
23

从以上可以看出:
※方法中的内部类对于方法是私有的,所以不能被任何访问控制修饰符修饰,如public

※方法内部是不能有static修饰符,除非该方法为static

※内部类只能访问外部类的所有成员,对于声明内部类的方法中方法参数和方法中的局部变量(如m),内部类是不能访问的;但如果局部变量被final修饰,如n,内部类可以访问,由于final型的变量属于特殊变量,它的生命周期比方法要长,只有当实例对象没有被引用时,且被系统回收后,变量的生命周期才算结束。

※由于内部类的类名只能使用在方法内部,所以该方法的返回类型也是不能使用该内部类的类名。如果这样的话,如何访问内部类呢?解决的方法是通过多态的技术。如果该内部类继承了一个已知的类或抽象类或者实现一个接口,就可以将内部类的返回类型写成父类的类型了。
posted on 2007-05-27 03:19 专心做技术 阅读(392) 评论(1)  编辑  收藏 所属分类: SCJP

评论

# re: JAVA内部类的访问[未登录] 2012-11-07 11:55 kkk
public C inner_method(int w) {
...
}中的return不需要么?  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: