結城浩のはてなブログ

ふと思いついたことをパタパタと書いてます。

匿名クラスと@Override

匿名クラス(anonymous class)のメソッドを作るときに@Overrideを使おうとすると、元がinterfaceだとオーバーライドできないと言われる(メソッドはそのスーパークラスのメソッドをオーバーライドしません)。なるほど…なのかな?

interface InterfaceExecutor {
    public void execute();
}

abstract class AbstractExecutor {
    public abstract void execute();
}

class Main {
    public static void main(String[] args) {
        new AbstractExecutor() {
            @Override public void execute() {   // OK.
                System.out.println("execute 1");
            }
        }.execute();
        new InterfaceExecutor() {               // Compile error.
            @Override public void execute() {
                System.out.println("execute 2");
            }
        }.execute();
    }
}

追記:
satoshisさんが調べてくださいました。恐縮です。そうか、@Overrideの節を見ればよかったのか。