【问题标题】:Can I implement an interface while instantiating an anonymous class?我可以在实例化匿名类时实现接口吗?
【发布时间】:2012-02-21 18:30:01
【问题描述】:

假设我有一个抽象类FactorizedDialog。它看起来像这样(请注意,这只是一些虚拟示例)

public abstract class FactorizedDialog extends Dialog {

  public abstract void myMethod();
} 

现在我可以这样做了:

FactorizedDialog dialog = new FactorizedDialog() {

            @Override
            public void myMethod() {
                // implementation here
            }
}

正如您可能已经猜到的那样,我扩展 Dialog(实际上是一个抽象类)只是为了向它添加一个方法,以便在创建匿名类时可以覆盖它。当我实例化 Dialog 而不是使用派生的抽象类时,是否可以在 java 中实现接口?

【问题讨论】:

    标签: java instantiation anonymous-class


    【解决方案1】:

    不,当您指定匿名内部类的超类时,您可以或者指定普通类来扩展接口,但不能同时指定两者。 section 15.9 of the JLS 中显示的语法根本不允许两者兼而有之。

    【讨论】:

      【解决方案2】:

      如果您的意思是Dialog 是一个接口,那么可以做到。

      Dialog dialog = new Dialog() {
      
          @Override
          public void myMethod() {
          }
      }
      

      当然myMethod的声明应该进入Dialog接口。

      【讨论】:

      • 正如我提到的,两者都是抽象类。
      • @edem 是的,我在发布答案后注意到了这一点。
      猜你喜欢
      • 2010-09-16
      • 2021-04-27
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多