Java 内部类机制
内部类(inner class)是定义在另一个类中的类。为什么需要使用内部类呢?其主要原因有以下三点:
1.内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据。
2.内部类可以对同一个包中的其他类隐藏起来。
3.当想要定义一个回调函数且不想编写大量代码时,使用匿名(anonymous)内部类比较便捷。
4.只有内部类可以是私有类,常规类只可以具有包可见性或者公有可见性。
5.在外围类的作用域之外可以这样引用内部类:OuterClass.InnerClass 。
6.局部内部类在一个类的方法中定义,不能用public或private访问修饰符进行声明,它的作用域被限定在声明这个局部类的块中。并且除了定义它的方法,没有任何方法知道它的存在,即使外围类的其他方法也不能访问它。
7.匿名内部类:只创建这个类的一个对象,就不必命名了,所以叫做匿名内部类。通常的语法格式为:
new SuperType(construction parameters){
inner class methods and data
}
由于匿名类没有类名,所以也就不能有构造器(构造器命名必须与类名相同)。取而代之的是,将构造器参数传递给超类构造器。在内部类实现接口的时候不能有任何的构造参数:
new InterfaceType(){
methods and data
}
8.静态内部类:有时候使用内部类只是为了把一个类隐藏在另一个类的内部,并不需要内部类引用外围类对象,为此,可以将内部类声明为static,以便取消产生的引用。
值得注意的是,只有内部类可以声明为static
9.声明在接口中的内部类自动成为static和public类。
值得注意的是,嵌套是一种类之间的关系,而不是对象之间的关系,也就是说,外围类的对象并不一定包含内部类的对象。