我可以在实例化匿名类时实现接口吗?

时间:2012-02-21 10:26:15

标签: java instantiation anonymous-class

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

public abstract class FactorizedDialog extends Dialog {

  public abstract void myMethod();
} 

现在我可以这样做:

FactorizedDialog dialog = new FactorizedDialog() {

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果您的意思是下面Dialog是一个接口,那么可以这样做。

Dialog dialog = new Dialog() {

    @Override
    public void myMethod() {
    }
}

当然,myMethod的声明应该进入Dialog界面。