JAVA内部类的访问

由于内部类定义在封装类的内部,所以内部类可以在封装类的内部进行访问,也可以在封装类外部进行访问。

1None.gif//Class A为外部类(封装类)B为非静态内部类
2ExpandedBlockStart.gifContractedBlock.gifpublic class A dot.gif{
3InBlock.gif private int a=0;
4InBlock.gif protected int b=0;
5ExpandedSubBlockStart.gifContractedSubBlock.gif private void outer_method()dot.gif{
6InBlock.gif      System.out.println("inner class can access all of the outer member"); 
7ExpandedSubBlockEnd.gif  }
8ExpandedSubBlockStart.gifContractedSubBlock.gif private void testInner()dot.gif{//该方法用于直接访问内部类
9InBlock.gif      B b=new B();
10InBlock.gif      b.execute();
11ExpandedSubBlockEnd.gif  }
12ExpandedSubBlockStart.gifContractedSubBlock.gif class B dot.gif{//内部类的声明
13InBlock.gif public int c=0;//内部类成员变量
14ExpandedSubBlockStart.gifContractedSubBlock.gif public void execute() dot.gif{
15InBlock.gif          a=10;
16InBlock.gif          b=9;
17InBlock.gif          outer_method();//访问外部类私有方法
18InBlock.gif          System.out.println("a="+a+";"+"b="+b);
19ExpandedSubBlockEnd.gif     }
20ExpandedSubBlockEnd.gif  }
21ExpandedSubBlockStart.gifContractedSubBlock.gif public static void main(String[] args) dot.gif{
22InBlock.gif          A a=new A();
23InBlock.gif          a.testInner();  
24ExpandedSubBlockEnd.gif  }
25ExpandedBlockEnd.gif}
26None.gif

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

1None.gif//A.java
2ExpandedBlockStart.gifContractedBlock.gifpublic class A dot.gif{
3InBlock.gifprivate int a=0;
4InBlock.gifprotected int b=0;
5ExpandedSubBlockStart.gifContractedSubBlock.gifpublic C inner_method(int w) dot.gif{
6InBlock.gif int m;
7InBlock.gif final int n=0;
8ExpandedSubBlockStart.gifContractedSubBlock.gif class B implements Cdot.gif{  //方法中的内部类
9InBlock.gif public int c=0;
10ExpandedSubBlockStart.gifContractedSubBlock.gif public void execute()dot.gif{
11InBlock.gif           a=10; //访问成员变量
12InBlock.gif           System.out.println("this is inner class");  
13ExpandedSubBlockEnd.gif       }
14ExpandedSubBlockEnd.gif   }
15ExpandedSubBlockEnd.gif}
16ExpandedSubBlockStart.gifContractedSubBlock.gifpublic static void main(String[] args)dot.gif{
17InBlock.gif  A a=new A();
18InBlock.gif  C b=a.inner_method(3);
19InBlock.gif  b.execute();
20ExpandedSubBlockEnd.gif}
21ExpandedBlockEnd.gif}
22ExpandedBlockStart.gifContractedBlock.gifinte***ce Cdot.gif{public void execute();}
23None.gif

从以上可以看出:
※方法中的内部类对于方法是私有的,所以不能被任何访问控制修饰符修饰,如public
※方法内部是不能有static修饰符,除非该方法为static
※内部类只能访问外部类的所有成员,对于声明内部类的方法中方法参数和方法中的局部变量(如m),内部类是不能访问的;但如果局部变量被final修饰,如n,内部类可以访问,由于final型的变量属于特殊变量,它的生命周期比方法要长,只有当实例对象没有被引用时,且被系统回收后,变量的生命周期才算结束。
※由于内部类的类名只能使用在方法内部,所以该方法的返回类型也是不能使用该内部类的类名。如果这样的话,如何访问内部类呢?解决的方法是通过多态的技术。如果该内部类继承了一个已知的类或抽象类或者实现一个接口,就可以将内部类的返回类型写成父类的类型了。

转载于:https://www.cnblogs.com/hukunyu/archive/2011/06/24/2088677.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值