创建内部类:
从外部类的非静态方法之外的任意位置创建某个内部类的对象,具体指明对象的类型:
OuterClassName.InnerClassName
链接到外部类:
内部类能访问其外围对象的所有成员
使用.this与.new
生成对外部类对象的引用,外部类.this
某些对象创建某个内部类的对象,使用外部类的对象创建内部类的对象
内部类与向上转型:
private内部类给类的设计者提供一种途径,通过这种途径可以完全阻止任何依赖与类型的编码,并完全隐藏了实现的细节
在方法和作用域内的内部类:
理由:
- 实现了某类型的接口,于是可以创建并返回对其的引用
- 你想要解决一个复杂的问题,想创建一个类来辅助你的解决方案,都是有不希望这个类是公共可用的
匿名内部类:
使用其基类方法 super.method()
定义字段时,可以对其执行初始化操作
匿名类通过实例初始化实现构造(匿名类不可能有构造器)
匿名内部类,希望他使用一个在其外部定义的对象,那么编译器会要求其参数引用是final的
普通的内部类:
普通的内部类对象隐式的保存了一个引用,指向创建它的外围对象
普通的内部类不能有static数据和static字段,也不能包含嵌套类
嵌套类:
- 要创建嵌套类的对象,并不需要其外围的对象
- 不能从嵌套类的对象中访问非静态的外围对象
闭包与回调:
闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建他的作用域。
内部类是面向对象的闭包
回调没有理清概念
内部类与控制框架:
控制框架是一类特殊的应用程序框架,主要用来响应事件的系统称作事件驱动系统
“使变化的事物与不变的事物相互分离”
内部类允许:
- 控制框架的完整实现是由单个的类创建的,从而使得实现的细节被封装了起来。内部类用来表示解决问题所必需的各种不同的action()
- 内部类能够很容易地访问外围类的任意成员,所以可以避免这种实现变得笨拙。
内部类的继承:
继承内部类时,构造器内使用以下语法
enclosingClassReference.super();
super实际上调用了基类(内部类)方法的构造器
内部类不能被覆盖,两个内部类是完全独立的两个实体,各自在自己的命名空间内
局部内部类:
局部内部类不能有访问说明符,可以访问当前代码块类的常量以及此外围类的所有成员
使用局部内部类而不是匿名类情况:
需要一个已命名的构造器,或者需要重载构造器,而匿名内部类只能用于实例初始化。
需要不止一个该内部类的对象