2013-10-10 28 views
3
interface MyInter { 
    public void display(); 
} 

class OuterClass8 { 

    public static void main(String arg[]) { 

     MyInter mi=new MyInter() { 

      public void display() { 
       System.out.println("this is anonymous class1"); 
      } 
     }; 

     mi.display(); 
    } 
} 

據我所知,我們不能實例化一個接口,那麼這是怎麼發生的?匿名內部類中的接口如何工作?

+0

檢查在以下鏈接社區維基:HTTP://計算器.COM /問題/ 355167 /如何,都-匿名內部類使用的功能於Java的 – user2339071

回答

3

你不能實例化一個接口,但是你可以提供一個接口的引用給實現該接口的類的對象,因此在代碼中你正在實現接口並創建該類的對象並給出該類的引用。

3

通過聲明

MyInter mi=new MyInter(){ 

    public void display() { 
     System.out.println("this is anonymous class1"); 
    } 
}; 

你宣稱實現了MyInter接口的匿名內部類。它類似於做

public class MyInterImpl implements MyInter { 
    public void display() { 
     System.out.println("this is anonymous class1"); 
    } 
} 

,並創建一個實例

MyInterImpl mi = new MyInterImpl(); 

但你以匿名方式這樣做。


你正確地認爲你不能實例化一個接口。你不能這樣做

MyInter mi = new MyInter(); 

但你可以做上面介紹的。

2

是,記住,你不能實例化一個抽象類或接口..

這是錯誤的:

MyInter mi = new MyInter(); 

,但你一定讀了一個超類引用變量可以容納引用子類對象。

所以通過創建

MyInter mi=new MyInter(){ 

    public void display() { 
     System.out.println("this is anonymous class1"); 
    } 
}; 

你創建了一個對象,一個匿名對象,但是這有MyInter作爲超..