java接口實例化對象

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。接口

若是有些場合,只須要臨時須要建立一個接口的實現類,上面的"技巧"能夠用來簡化代碼。編譯器

相關文章
相關標籤/搜索