内部类
内部类是定义在另一个类中的类。可以访问该类所在的作用域中的数据,同时对同一个包中的其他类不可见。在外部类外引用内部类可以使用OuterClass.InnerClass的形式。内部类的对象要通过外部类的对象调用构造函数来获取。编译器会自动修改内部类的构造函数,添加一个外部类对象的引用。
成员内部类
内部类作为外部类的成员。这并不意味着每个外部类对象都有内部类的实例,但是内部类对象可以访问外部类的所有成员变量和方法,包括私有变量。外部类使用内部类的成员变量和方法时,需要通过内部类的对象来获取。
成员内部类不能含有static类型的变量和方法。(java类的加载顺序是加载类->静态变量初始化->创建对象,但内部类如果有静态变量就需要在内部类加载后加载,而内部类需要在外部类实例化后由外部类的对象调用,就产生了矛盾。)
可以通过getInner()来获取内部类对象:
public Inner getInner() {
return new Inner();
}
Outer outer = new Outer();
Outer.Inner inner = outer.getInner();
局部内部类
当一个类只在某个方法或作用域中用到时,可以在这个方法中或作用域定义该内部
类。局部类不能用public或private声明,外部取不到。
嵌套内部类
嵌套内部类,就是修饰为static的内部类。声明为static的内部类,不需要内部类对象和外部类对象之间的联系,就是说我们可以直接引用outer.inner,即不需要创建外部类,也不需要创建内部类。
嵌套类和普通的内部类还有一个区别:普通内部类不能有static数据和static属性,也不能包含嵌套类,但嵌套类可以。而嵌套类不能声明为private,一般声明为public,方便调用。
#匿名内部类
#静态内部类