1.今天在博客上忽然看見一段代碼,直接new一個Runnable接口,具體代碼以下。java
Runnbale runnable = new Runnable(){ public void run(){ //具體實現 } }
我第一次意識到接口也能夠實例化。而後上網搜了一下答案,在此總結一下。spa
簡單示例: public interface ISay { void sayHello(); } /*****************/ public class Program { public static void main(String[] args) { ISay say = new ISay() { public void sayHello() { System.out.println("Hello java!"); } }; } } /*****反編譯代碼********/ class Program$1 implements ISay { public void sayHello() { System.out.println("Hello java!"); } }
初看上去,就好象在「不提供接口實現的狀況下,直接new了一個接口實例」。code
觀察bin目錄下的class輸出,會發現有一個相似Program。blog
class文件,若是反編譯觀察一下,發現原來是編譯器自動生成一個類program。接口
若是有些場合,只須要臨時須要建立一個接口的實現類,上面的"技巧"能夠用來簡化代碼。編譯器