[英]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
您正在定義一個具有順序分配名稱(如1
、 2
、 3
等)的內部類。同時,您正在使用new
關鍵字實例化內部類。 您不關心內部類的名稱,因為您是匿名使用它的。 如果您查看 bin 目錄,您將看到每個匿名定義的類文件。 例如,如果您在類Foo
使用匿名類, Foo$1.class
為您創建Foo.class
和Foo$1.class
。 我相信這意味着您可以在以后使用反射實例化更多匿名類。
您正在創建一個類並在使用匿名類時實現接口。您可以覆蓋方法或在匿名類中實現方法
A a= new A(){
};
這里 a 是 A 類型的引用變量,它不是指 A,而是指實現 A 的類的對象,該對象沒有名稱
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.