簡體   English   中英

帶接口的匿名類

[英]Anonymous class with interface

在處理匿名內部類時,我對接口的概念感到困惑。 據我所知,你不能在Java中實例化一個接口,所以下面的語句會出現編譯錯誤

     ActionListener action = new ActionListener();  // compile error

當它處理匿名類時會發生什么? 為什么它允許使用new 例如:

     JButton button = new JButton("A");
     button.addActionListener(new ActionListener(){    //this is fine
           @Override
           public void actionPerformed(ActionEvent e){

           }
     };

編譯器只是創建一個類並在幕后實現ActionListener嗎? 它是如何工作的?

它允許您創建一個實現ActionListener的新匿名類,因為您提供了實現,只是沒有給它一個類名。

當您創建內部類時,您正在實例化一個實現該接口的匿名類。

在你的情況下,效果是一樣的: public class Foo implements ActionListener

您正在定義一個具有順序分配名稱(如123等)的內部類。同時,您正在使用new關鍵字實例化內部類。 您不關心內部類的名稱,因為您是匿名使用它的。 如果您查看 bin 目錄,您將看到每個匿名定義的類文件。 例如,如果您在類Foo使用匿名類, Foo$1.class為您創建Foo.classFoo$1.class 我相信這意味着您可以在以后使用反射實例化更多匿名類。

您正在創建一個類並在使用匿名類時實現接口。您可以覆蓋方法或在匿名類中實現方法

    A a= new A(){ 

               }; 

這里 a 是 A 類型的引用變量,它不是指 A,而是指實現 A 的類的對象,該對象沒有名稱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM