为什么我的类不能实现在其中声明的接口?

时间:2013-02-12 15:17:09

标签: java interface implementation inner-classes

我刚刚遇到一种行为,我首先认为它是Eclipse中的一个错误。考虑这个简单的类:

public class Foo {
    public static interface Callback {
        public void onAction();
    }
}

这完全有效。但是,这不是:

public class Foo implements Callback {
    public static interface Callback {
        public void onAction();
    }

    public void onAction() { /*some implementation*/ }
}

但这也是有效的:

public class Foo {
    public static interface Callback {
        public void onAction();
    }

    private final Callback mCallback = new Callback() {
        public void onAction() { /*some implementation*/ }
    };
}

为什么Java迫使我“浪费”一个成员,如果它可以通过让我自己实现它来简单地保存它?我很清楚将这个界面放在自己的文件中的“解决方法”,但出于好奇:有没有理由说这不起作用?

2 个答案:

答案 0 :(得分:8)

使用此代码

public class Foo implements Callback{

public static interface Callback{
    public void onAction()
}

public void onAction(){//some implementation}
}

什么是Callback?编译器(btw与Eclipse不同,)不知道什么是Callback

您在使用后定义了Callback界面。

答案 1 :(得分:6)

在第二种情况下,由于在类的主体之前检查签名,当编译器尝试编译Foo类时,Callback接口尚未定义。