1.内部类的作用
1)增强封装,将外部类隐藏在内部类之内,不允许其他类访问
2)提高代码的可读性和可维护性
3 )内部类可以直接访问外部类
内部类编译之后会产生一份单独的字节码文件
2.内部类的分类
外部类 要么使用public修饰要么缺省
内部类 相当于外部类的一个成员,好比字段,那么可以用 public/protected/缺省/private/static修饰
1)实例内部类---没有使用static修饰的内部类
属于外部类的对象,不属于外部类本身
特点:
A.创建实例内部类之前,一定要先创建外部类对象,通过外部类对象来创建内部类对象(当存在内部类对象时,一定存在外部类对象)

B.实力内部类直接拥有外部类的实例(对象)内部类可以直接访问外部类的成员

C.外部类中,不可以直接访问内部类的成员,必须通过内部类的实例对象来访问

D.实例内部类中不能定义静态成员,只能定义实例成员
E.如果实例内部类和外部类拥有相同的字段和方法abc,在内部类中 this.abc 表示访问内部类
outter.this.abc 表示访问外部类

2)静态内部类--用static修饰
A.静态内部类直接属于外部类,不属于外部类的对象,所以不用创建外部类对象,就可以创建内部类对象

B.静态内部类可以直接访问外部类的静态成员,访问非静态成员,要通过外部类的实例对象进行访问
C.测试类可以通过完整的类名调用静态内部类中的静态成员;
eg: outter.inner.test();
3)局部内部类(一般不用)
4)匿名内部类(属于局部内部类,经常使用)
是一个没有名称的内部类,只使用一次。
在javaSE/Android事件中用的比较多,比如:不同的按钮点击之后,有不同的效果,首先选用匿名内部类
new 父类构造器 (参数)或接口
{
代码块
}
注意:匿名内部类,必须且只能继承一个类或实现一个接口
特点:
A.匿名内部类本身没有构造器,调用父类的构造器。
B.匿名内部类可以处理继承之外还可以实现接口
