在Java中调用的这种方法覆盖是什么?

时间:2009-10-09 07:49:28

标签: java override anonymous-inner-class

我是Java的新手,我正在使用新的API。我遇到了这个方法覆盖,我不确定这叫做什么:

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

据我所知,这将覆盖Button类的onSubmit方法。我以前从未遇到过这种压倒一切。它有特定的名称吗?我想了解更多关于它但我找不到它。到目前为止,我所有的搜索结果都是通过创建一个新类来定期覆盖,这是我已经熟悉的。

如果有人能指出我正确的方向,我会很感激。

感谢。

3 个答案:

答案 0 :(得分:32)

那是anonymous inner class

在上面的示例中,我们不是创建扩展private class的{​​{1}},而是创建Button的子类,并根据其余代码提供重写方法的实现。

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

它可以是一个非常方便的快捷方式,特别是对于Button类,但如果你被带走并且内联方法定义太长,它可能会使你的代码难以理解。

答案 1 :(得分:12)

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

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

答案 2 :(得分:7)

这是一个匿名的内部类。

更多信息:Anonymous classes