内部类的几个应用点:
1.访问该类定义所在的作用域中的数据,包括私有数据
2.可以对同一个包中的其他类隐藏起来
3.匿名内部类可以应用于回调函数
关于数据访问
内部类可以直接访问其外围类的所有数据,包括私有数据。
在内部类之外、外围类之内可以直接访问内部类,例如构造一个内部类对象:
object o = new InnerClass();
也可以更准确地构造一个内部类对象:
object o = this.new InnerClass();
在外围类作用域之外引用内部类,采用这种形式:
OuterClass.InnerClass
关于局部内部类
内部类可以定义在局部方法之中,不能用public或private关键字声明,它的作用域被限定在局部方法之中,并且对外部世界完全隐藏
局部内部类既可以访问外围类的数据,也可以访问局部变量,注意必须是那些没有改变过的局部变量才可访问
关于静态内部类
当内部类不访问外部类的非静态数据时,可以把内部类声明为static静态内部类
对于非静态内部类,若要在外围类之外构造内部类对象,只能通过外围类对象调用构造器:
OuterClass.InnerClass o = outerClassObject.new InnerClass();
对于静态内部类,则可以通过外围类类名调用构造器:
OuterClass.InnerClass o = new OuterClass.InnerClass();
声明在接口中的内部类自动成为static和public的
关于匿名内部类
若只创建这个类的一个对象,就不必命名,这个类可以是接口,也可以是父类,如下:
//相当于创建了一个实现了接口的类
aInterface a = new aInterface(){...}
//相当于创建了一个继承了父类的类
aSuperClass a = new aSuperClass(){...}