成员内部类
持有外部类的引用,可以访问外部类的所有成员变量和方法 依赖外部类,声明内部类需要外部类对象
局部内部类
在方法或作用域中声明的类,访问权限仅限在方法或作用域内。内部类不能被public、private、static修饰;创建内部类的实例只能在包含他的方法中;只能访问final局部变量。
匿名内部类
实现父类或者接口中的方法情况下同时产生一个相应的对象,只能访问局部final变量,因为存在变量的生命周期问题,可能匿名内部类调用局部变量时变量已经死亡,编译器会将变量复制一份存放在匿名内部类中,如果局部变量的值在编译期间就可以确定,则直接在匿名内部里面创建一个拷贝。如果局部变量的值无法在编译期间确定,则通过构造器传参的方式来对拷贝进行初始化赋值。因此若在匿名内部类中修改变量,会出现数据不一致问题,所以编译器限定匿名内部类只能访问final变量
静态内部类
不持有外部类引用,不能访问外部类非静态成员变量和方法