内部类:将一个类的定义放在另一个类定义的内部。
一、创建内部类
把类的定义置于外围类的里面。
更典型的情况是:外部类有一个方法返回一个指向内部类的引用,例如:
publicDestination to(String s){
return new Destination(s);
}
二、连接到外部类
内部类对象能访问其外围类对象的所有成员而不需要任何特殊条件。
内部类拥有外围类所有对象的访问权。
三、使用.this和.new
需要生成对外部类对象的引用时,使用外部类名称.this,这样产生的引用自动地具有正确的类型。
四、内部类与向上转型
将内部类向上转型为其基类和接口时,因为内部类---某个接口的实现---能够完全不可见不可用,得到的只是指向基类或接口的引用,隐藏实现的细节。
五、在方法和作用域内的内部类
六、匿名内部类
对匿名内部类而言,实例初始化的效果是构造器,但不能重载实例初始化方法,所以只有这一个构造器。
匿名内部类既可以扩展类也可以实现接口,但不能二者兼备,而且实现接口也只能实现一个接口。
七、嵌套类
1.定义:若不需要内部类与其外围类对象之间有联系,则可将内部类声明为static,称为嵌套类。
2.注意:
①创建嵌套类的对象不需要其外围类的对象。
②不能从嵌套类的对象中访问非静态的外围类对象。
③普通内部类不能有static数据和字段,也不能包含嵌套类。
④一个内部类无论被嵌套多少层,都能透明的访问所有它所嵌入的外围类的所有成员。
八、设置内部类的原因
①内部类提供了某种进入其外围类的窗口。
※每个内部类都能够独立的继承自一个(接口的)实现,所以无论是外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
②闭包(closure):一个可调用的对象,记录一些来自于创建它的作用域的信息。
回调(callback):通过回调,对象能够携带一些信息,允许在某个时刻调用初始的对象。
九、内部类的继承
因为内部类的构造器必须连接到其外围类对象的引用,所以继承内部类的时候会较复杂,必须在构造器内部使用:enclosingClassReference.super();
十、内部类可以被覆盖吗
几个内部类是完全独立的实体,各自在自己的命名空间内。
十一、局部内部类
可以在代码块内部创建内部类,典型方式是在一个方法体内创建。
使用局部内部类而不是匿名内部类的原因是需要一个已命名的构造器或需要重载构造器。
十二、内部类标识符
内部类命名规则:外围类的名字加上$再加上内部类的名字。
本文详细介绍了Java内部类的概念、创建方法及应用场景,包括内部类与外部类的关系、向上转型、匿名内部类等内容,并探讨了内部类的继承、覆盖等问题。

被折叠的 条评论
为什么被折叠?



