【问题标题】:What is this type of method overriding called in Java?在 Java 中,这种类型的方法覆盖是什么?
【发布时间】:2009-10-09 07:49:27
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

  • 很好的问题......而且这是很难在参考中查找的东西! +1 谢天谢地,当我试图在 SO 上问同样的 Q 时,它为我找到了你的 Q。

标签: java overriding anonymous-inner-class


【解决方案1】:

那是anonymous inner class

在上面的示例中,我们没有创建扩展 Buttonprivate class,而是创建了 Button 的子类,并提供了与其余代码一致的重写方法的实现。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢。我搜索了内部方法,但没有将其视为内部类,更不用说匿名内部类了。去看看他们我走了!
    【解决方案3】:

    这是一个匿名内部类。

    更多信息:Anonymous classes

    【讨论】:

      猜你喜欢
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多