本帖最后由 且听风语 于 2014-6-26 22:55 编辑
内部类 可以划分为 四种类型 第一种:非静态成员内部类 第二种:静态成员内部类 第三种:非静态局部内部类 (想使用局部内部类时需要生产对象,对象调用方法,在方法中才能调用局部内部类,所以不可能有静态的局部内部类。) 第四种:匿名内部类
下面介绍第一种类型:非静态成员内部类 优点: A. 作为外部类的成员存在,跟成员变量和方法并列 B. 能够访问外部类的成员变量和方法,哪怕外部类的成员是私有的也一样能访问 C. 也能够被外部类随意访问和创建对象
以下代码揭示了其访问规则: - class outer{
- private static int i=100;
- private int j=20;
- private int k=30;
- public static void outer_o1(){
-
- }
- public void outer_o2(){
-
- }
- public void outer_o3(){
- Inner in=new Inner();//外部类创建内部类对象的引用
- in.inner_i1();//调用内部类的方法
- }
- public static void outer_o4(){//静态成员方法调用非静态内部类成员时
- //Inner inner=new Inner();不能直接创建必须按照下述步骤完成
- //step1 建立外部类对象
- outer outer=new outer();
- //step2 根据外部类对象建立内部类对象
- Inner in=outer.new Inner();
- //step3 访问内部类方法
-
- in.inner_i1();
- }
- class Inner{
- //static int inner_i=1;非静态内部类无法建立静态成员变量
- private int inner_i=1;
- int j=200;//可以和外部类同名的变量
- void inner_i1(){
- System.out.println(inner_i);//正常访问自己的成员
- System.out.println(j);//在访问内部类的成员直接写变量名就可以了
- System.out.println(this.j);//访问本类的成员
- System.out.println(outer.this.j);//内部类访问于外部类同名的实例变量
- //用外部类名.this.变量名
- System.out.println(i);//不同名的变量直接访问
- outer_o1();
- outer_o2();//直接访问外部类的静态和非静态成员
- }
- }
-
-
- }
- public class InnerClass {
- public static void main(String[] args) {
- outer.Inner in=new outer().new Inner();//创建内部的对象的引用
- in.inner_i1();
- }
- }
复制代码
|