1、非静态内部类:
a、四种访问权限:public protected default private(与成员变量相同)
b、如果外部内属性、内部类属性与内部里方法的局部变量同名,则可以使用this、外部类类名.this做为限定来区分。
c、非静态内部类成员可以访问外部类的private成员,但是反过来不成立,外部类不可直接使用非静态内部类成员,必须采用非静态内部类对象来调用访问实例成员。
d、不允许在外部类的静态成员中直接使用非静态内部类(使用非静态内部类定义变量,创建实例);不允许在非静态内部类定义静态成员。
e、非静态内部类不可有静态初始化块,但是可以包含普通初始化快。
2、静态内部类:
a、可以包含静态成员,也可以包含非静态成员。静态内部类不能访问外部外部类的实例成员,只能访问外部类的静态成员。
b、外部类不能直接访问静态内部类的成员,但是可以通过静态内部类类名来方位静态内部类的类成员,对象来访问实例成员。
c、允许接口里定义内部类,默认使用public static修饰
3、使用内部类:
a、在外部类内部使用内部类
b、在外部类以外使用内部类:如果内部类为private则不可访问,其他与类的成员访问权限相同。
b1:定义内部类(静态和非静态)变量:outerClass.InnerClass varname;
b2:创建非静态内部类实例:outerInstance.new InnerConstructor();
当构建非静态内部类的实例,必须保证子类构造器可以调用非静态内部类的构造器,调用非静态内部类的构造器,必须存在一个外部类的对象。
b3:使用静态内部类:new ouerClass.InnerConstructor();
4、局部内部类:
在方法内定义个类, 仅在方法内部有效。
5、匿名内部类:
6、通过内部类可以实现闭包回调。