本地内部类

你也可以在代码段里,通常就是方法的正文部分创建内部类。本地内部类不能有访问控制符,因为它不属于宿主类,但是它确实可以访问当前代码段的final变量,以及宿主类的所有成员。一个程序分别用本地内部类和匿名内部类实现了这个接口,两者有着相同的行为和功能。由于本地内部类的名字在这个方法外面是没法访问的,因此用本地内部类来代替匿名内部类的唯一正当的理由就是,你需要一个有名字的构造函数,并且/或者要重载这个构造函数,因为匿名内部类只能进行实例初始化。选择本地内部类而不是匿名内部类的唯一原因就是,你必须创建多个哪种类的对象。

内部类与控制框架

内部类还有一种更实际的用法,我把它称为“控制框架”,应用程序框架是一个或一组为解决某种特定类型的问题而设计的类。如果向使用应用程序框架,通常情况下只要继承其中的一个或多个类,再覆写某些方法就可以了。应用程序框架为你提供了一套解决问题的通用方案,而你只要覆写方法就可以根据你的特殊要求定制这个方案了(这就是一种模板方法的设计)。

控制框架是应用程序框架中的一种,主要用于响应事件。如果系统的首要任务就是对事件做出响应,那么它就被称为事件驱动系统。图形用户界面(GUI)是创建应用程序时要解决的最棘手的问题之一,它差不多就是完全由时间驱动的。Java的swing类库就是一个控制框架。它通过频繁的使用内部类,非常潇洒的解决了GUI的难题。

«1»