Java编程思想学习录连载文章
用thinkpad打字确实很爽啊!
一个典型的例子:利用 Java内部类 实现的 迭代器模式
.this用于在内部类中生成对其外部类对象的引用之时,举例:
.new用于直接创建内部类的对象之时,距离:
嵌套类是无需依赖其外部类的对象的。非static内部类通过一个特殊的this链接到其外围类的对象,而static类型的内部类无此this引用。
接口与内部类有着很有趣的关系: 放到接口中的任何类自动都是public且static,即接口中的任何类都是嵌套类,我们甚至可以在接口的内部类中去实现其外围接口,举例:
可以称这类为 局部内部类!
方法中定义的内部类只能在方法内被使用,方法之外不可访问,举例:
更进一步,可在任意作用域内定义内部类,举例:
直观上看,这种内部类没有“名字”,举例:
若想将外部的参数传到匿名内部类中(典型的如将外部参数用于对匿名内部类中的定义字段进行初始化时)使用的话,该参数必须final,举例:
匿名内部类中不可能有命名的显式构造器,此时只能使用实例初始化的方式来模仿,举例(当然下面这个例子还反映了匿名内部类如何参与继承):
匿名内部类 + 工厂模式 = 更加简洁易懂:
内部类可以独立地继承自一个接口或者类而无需关注其外围类的实现,这使得扩展类或者接口更加灵活,控制的粒度也可以更细!
注意Java中还有一个细节:虽然Java中一个接口可以继承多个接口,但是一个类是不能继承多个类的!要想完成该特性,此时除了使用内部类来“扩充多重继承机制”,你可能别无选择,举例: