种类
① 实例内部类: 内部类没有使用static修饰.
② 静态内部类: 内部类使用了static修饰.
③ 局部内部类: 在方法中定义的内部类.
④ 匿名内部类:适合于仅使用一次使用的类,属于局部内部类的特殊情况
(摘自小码哥)
一 实例内部类
没有使用static修饰的内部类,属于外部类的对象而非本身。
**特点**
- 创建实例内部类前,必须存在外部类对象,通过外部类对象创建内部类本(如果有内部类对象,一定存在外部类对象)
Outter.Intter in = new Outter().newIntter(); - 内部类可直接访问外部类成员
- == 外部类不能直接访问内部类 ==,必须通过内部类的实例去访问
- 实例类中不能定义静态成员,只能定义实例成员
- 如果实例内部类和外部类中存在同时的实例和方法,那么在内部类中
this.abc 表示访问内部类成员
外部类.this.abc 表示访问外部类成员
静态内部类
使用static修饰的类
特点:
- 在创建内部类实例时,不必创建外部类实例
- 静态内部类可直接访问外部类的静态成员买入访问外部类的实例成员,必 须通过实例类访问
- 在静态内部类中可以定义静态成员和实例成员
- 测试类可以通过完整的类名直接访问静态内部类的静态成员
局部内部类
在方法中定义的内部类,其可见范围是当前方法与局部变量是同一级别
特点:
- 不能使用 public, private, protected, static 修饰符
- 局部内部类只能在当前方法中使用
- 不能包含静态成员
- 可以访问外部类的所有成员
- 局部内部类的局部变量必须用final修饰,为常量
- 局部内部类只能访问final修饰的局部变量
匿名内部类
没有名称的局部内部类,适用于只使用一次的类
特点:
- 匿名内部类本身没有构造器,但是会调用父类的构造器
- 内部类可以继承类和接口