1、内部类
特性:内部类拥有其外部类所有元素的访问权,这个是编译器帮我们处理好了访问的细节。
2、.this和.new
2.1如果你想要在内部类中生成对外部类对象的引用,可以使用外部类的名字后面紧跟.this。这样产生的引用自动的具有正确的类型,这一点在编译期就被知晓并受到检查,因此没有任何运行时期的开销。
2.2有时,在外部类的外边需要使用内部类的对象,这个时候就需要去创建一个内部类对象。但是必须使用外部类的对象去创建一个内部类对象。
3、在方法和作用域内的内部类——局部内部类
局部内部类—— 一个定义在作用域内的类,此作用域在方法的内部
像局部变量一样,不能被public, protected, private和static修饰。
只能访问方法中定义的final类型的局部变量。
4、匿名内部类——似乎是要创建一个对象的时候,但是你却说“等一等,我想在这里添加一个类的定义。”
匿名内部类—— 没有构造函数
匿名内部类其实有一种奇怪的语法,这种语法指的是:创建一个继承自X类(或接口)的匿名类的对象。通过new表达式返回的引用被自动向上转型为对X的引用。
5、静态内部类——嵌套类
6、闭包和回调
闭包——是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域。
7、内部类的继承
8、内部类可以被覆盖吗?
如果创建了一个内部类,然后继承其外围类并重新定义此内部类时,会发生什么呢?答案是:内部类并没有被覆盖,而且两个内部类属于完全独立的两个实体,各自有各自的命名空间。
9、内部类标识符
由于每个类都会产生一个.class文件,其中包含如何创建该类型对象的全部信息。内部类也会产生一个class文件已包含它们的Class对象信息,只不过这些文件命名有自己的规则:外围类的名字$内部类名字.class。
如果类是匿名内部类,$符号后跟一个数字。