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!」が表示されました。