内部类的性质和外部类不一样,务必分清为什么写的这么详细,因为根本没好好学内部类。

内部类基础

  1. 内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独。其并没有“is-a”关系,就是一个独立的实体,并且提供了更好的封装,除了该外围类,其他类都不能访问。
  2. OuterObj outerObj=new OuterObj();
    InnerObj innerObj=new outerObj.new InnerObj();
  3. 内部类会单独产生class文件

    内部类种类

    242025553_1547012774538_BA9669C5826A238ACEC0BD86755FA5DB.png

    局部内部类

    方法内或在某个作用域内的内部类,例如:
    1. public class OutterType {
    2. public void function() {
    3. /** 局部内部类Inner*/
    4. class Inner {
    5. public void print() {
    6. System.out.println("局部内部类...");
    7. }
    8. }
    9. }
    10. }
    局部内部类是无法使用public、protected、private修饰的,同时也不能使用static
    不过可以使用abstract和final,虽然这二者与和上面也没什么关联
    匿名内部类是一种局部内部类

    静态内部类

    ① 静态内部类不能直接访问外部类的非静态成员,但可以通过 new OuterObj().member 的方式访问
    ② 静态内部类不会在加载外部类时加载,只有调用时才会加载
    ③ 非静态内部类中无法定义静态变量、方法,静态内部类才允许
    ④ 创造静态内部类无需new出外部类