匿名クラスと@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の節を見ればよかったのか。