Java 内部类

java内部类分为成员内部类、局部内部类、匿名内部类、静态内部类四种。

1.成员内部类

public class OutClass {

    private  String outV;
    private void outMethod()
    {
        System.out.print("outMethod");
    }

    public class InnerClass
    {
        private String innerV;
        private void innerMethod()
        {
            System.out.print("innerMethod");
        }
    }

}

内部类以外部类成员形式定义在外部类里面。
非静态内部类持有外部类引用,可以访问外部类所有成员和方法(包括静态和private修饰)。
内部类访问外部 同名成员 需要 通过外部类的this来访问,否则默认为内部类成员。
外部类访问内部类需要创建内部类对象,通过内部类对象的引用进行访问(创建内部类对象需要通过一个外部类对象)。
内部类独立继承(接口的)实现,外部类的继承(接口)实现对内部类没有影响。
成员内部类被用来继承时候,构造函数必须传入外部类的对象引用,并且必须调用该对象的super()方法。

2.局部内部类

public class OutClass {

    private  String outV;
    private void outMethod()
    {
        System.out.print("outMethod");
    }

    
    private void innerClassDefine()
    {
          class  InnerClass
        {
        }
        
    }
}

定义在方法或者块内部的类,不能用权限修饰符(private public...)进行修饰。

3.匿名内部类

button.setOnClickListener(new OnClickListener() {
             
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                 
            }
        });
         

当创建一个抽象类或者含有接口未实现方法的类的实例时会使用到匿名内部类,顾名思义,这是一个不含有名字定义的新类,往往这个类只创建一次。
匿名内部类没有构造器,通常用于回调接口的实现。
局部内部类和匿名内部类只能访问 final修饰符修饰的局部变量。final修饰的局部变量在编译期可以确定值,因此会生成原变量的一个备份,匿名内部类使用这个备份变量。

4.静态内部类

public class OutClass {


    public static  class  InnerClass
    {
        


    }
}

静态内部类是通过static修饰符定义的内部类,静态内部类不持有外部类引用,可以在外部直接创建可访问的内部类实例对象。

你可能感兴趣的:(Java 内部类)