您的位置:首页 > 编程语言 > Java开发

Java 中的四种嵌套类:嵌套静态类、成员类、本地类和匿名类

2005-09-29 13:21 295 查看
嵌套静态类是任何一个在另外一个类或者接口的代码体中声明的类,它作为外嵌类或者接口的静态成员。嵌套静态类的行为类似于顶级类,唯一的差别是嵌套静态类前除了有 Java 包的名字以外还有外嵌类的名字。嵌套静态类是静态成员,因此没有 this 指针指向外嵌类的实例,也就是说嵌套静态类不能访问外嵌类的实例数据。当一个重要的数据结构紧密的关联与外嵌类,并且该数据结构有足够的内容保证它能够拥有一个类的时候,一般情况下我们可以使用嵌套静态类。在 java.lang.String 中我们可以看到:

public class String {
private static class CaseInsensitiveComparator implements Comparator, java.io.Serializable {
//…
}
}

代码中所示的嵌套静态类用于进行大小写无关的比较,Comparator 接口是 java.util 包中的一部分,通过把这个类嵌入到 String 中,我们就可以把这个类和 String 紧密的关联起来。

内部类有三种形式:成员类、本地类和匿名类,每个类依次都是对它前一个类的改进。内部类的可视范围是它的直接外嵌类(这一点和嵌套静态类不同,嵌套类在其外嵌类之外也是可视的),也就是说内部类可以直接引用外嵌类中的任何成员。因为内部类与外嵌类的实例相关,所以内部类拥有两个 this 指针,一个指向内部类的实例本身,一个指向外嵌类实例。内部类的一个主要用途是用于 GUI 的事件处理程序。

成员类很像嵌套静态类,只是不带 static 关键字。java.awt.ScrollPane 中有如下代码:

public class ScrollPane extends Container implements Accessible {
// …
class PeerFixer implements AdjustmentListener, java.io.Serializable {
//…
}
}

本地类是在代码块中声明的,因此它不是外嵌类的成员。一般来说,本地类在方法中进行声明。成员类和本地类的差别很小,通过把本地类移到方法的外部,我们可以很容易得把它转换成为成员类。它们两个之间最重要的差别是,本地类只能访问 final 的变量或者参数。

匿名类允许我们把类的定义和实例的分配组合在一起。无须象其它任何嵌套类那样进行声明,我们可以直接用 new SomeClass() 实例化对象,并且在实例化的位置把整个类的实现都放在花括号中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: