41

我对 Java 比较陌生,我正在使用新的 API。我遇到了这个方法覆盖,但我不确定这叫什么:

public void exampleMethod() {
    Button loginButton = new Button("login"){
       public void onSubmit(){
          //submit code here
       }
    };
}

据我了解,这是覆盖 Button 类的 onSubmit 方法。我以前从未遇到过这种类型的压倒一切。它有具体的名称吗?我想阅读更多关于它的信息,但我找不到它。到目前为止,我的所有搜索都通过创建一个新类来覆盖常规方法,这是我已经熟悉的。

如果有人能指出我正确的方向,我将不胜感激。

谢谢。

4

3 回答 3

38

那是一个匿名的内部类

在上面的示例中,我们创建了一个 Button 的子类,并根据其余代码提供了覆盖方法的实现, 而不是创建一个private classextends 。Button

由于这个新类是动态创建的,因此它没有名称,因此是匿名的。因为它是在另一个类中定义的,所以它是一个匿名内部类。

它可能是一个非常方便的快捷方式,尤其是对于Listener类而言,但如果您忘乎所以并且行内方法定义太长,它会使您的代码难以遵循。

于 2009-10-09T07:51:45.147 回答
13

那是一个匿名的内部类。基本上,它创建了一个派生自指定类的新类(Button在这种情况下,尽管您可以使用相同的技术来实现接口)并覆盖适当的方法。它也可以包含其他方法,但它们只能在该类中可用。

该类可以访问同一方法中的最终局部变量,并且如果您正在编写实例方法,它也具有隐式引用this(因此您可以在“主”类中调用其他方法)。

于 2009-10-09T07:51:00.110 回答
7

那是一个匿名的内部类。

更多信息:匿名课程

于 2009-10-09T07:51:17.893 回答