这里有一个简单的例子:
private final MouseAdapter mouse = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
calculate();
}
};
这是一个类级别的字段,所以称它为匿名类似乎是不对的。嵌套类上的Oracle教程页面中的其他名称或描述似乎都不适合。
我猜这是一个类似于"一次性对象"的东西,但我很难在描述它时不说"类级命名匿名类"之类的话
对于那些不熟悉Java和AWT的人,我正在创建一个类的实例,该类没有操作方法来实现用于监听鼠标操作的接口。我想要一个实际的实例,这样我就可以将其添加为多种类型的侦听器(轮子、运动和单击),但使用相同的对象进行控制。然而,这个问题本身并不是AWT特有的。
让我们把它分成几块
-
private final MouseAdapter mouse
被称为类成员,该类型(MouseAdapter
)表示该成员可以引用MouseAdapter
的实例和/或子类。 -
new MouseAdapter() { ... }
被称为MouseAdapter
接口/抽象类的匿名实现。
因此,总结一下:类成员mouse
拥有对MouseAdapter
接口/抽象类的匿名实现的引用。
它是一个匿名类的实例,不需要为此找到新名称。
来自Oracle文档:
匿名类使您的代码更加简洁。他们使您能够同时声明和实例化一个类。他们类似于本地类,只是它们没有名称。使用它们如果您只需要使用一次本地类。
它并没有说实例只使用一次,而是只使用类,所以与您的情况没有矛盾。
同意kocko's
的答案,但想添加一件事,即
匿名类是表达式, 这意味着您在另一个表达式中定义该类。
因此,无论您在哪里声明它,它都将保持匿名类,无需对声明进行不同的命名。:)