成员内部类
- 它的成员不能用static修饰
- 调用方式
new Outer().new Inner(); - 可以访问外部类的任意成员
静态内部类
- 属性可以是任意权限修饰
- 方法用static修饰,类也是static的
- 调用里面的普通方法
new Outer.Inner().fun(); - 调用静态方法
Outer.Inner.fun();
局部内部类
- 不能用public修饰
- 可获取外部类的成员变量、局部内部类的成员变量和外部类的局部变量(1.7之前需要用final修饰才能访问到)
匿名内部类
- 前提:实现一个接口或继承一个抽象类
心得
- 静态内部类不能直接访问外部类的非静态成员
- 外部类不能访问内部类的成员
- 可以把成员内部类当做类里面的成员去看待
- 当一个静态内部类对象存在,并不一定存在对应的外部类对象