社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

Java challenge Interface

問題:何が出力されるのか?

public class BigBangTheory {

  public static void main(String[] args) {
	Scientist scientist = new Sheldon() {
	  search() {
		System.out.println("This is my new spot!");
	  }
	};

	scientist.search();
  }
	
  interface Scientist {
	void search();
    }

    static class Sheldon implements Scientist {
	void search() {
            System.out.println("This is my spot.");
	}
    }
}

考え
Sheldon のインスタンス生成時に、search() をオーバーライドしているのだから
「This is my new spot!」と表示されるはず。

答え
コンパイルエラー。。理由↓
1. Sheldon クラス内の search() メソッドのアクセス修飾子の可視性が下がってしまっている。 public -> 指定なし
2. Sheldon のインスタンス生成時における search() メソッドに戻り値の型が指定されていない。

インターフェースのメンバは暗黙的に public になることと、文法の誤りに気付くかどうかですね。
コンパイル通るようにしたら、「This is my new spot!」が表示されました。