[英]How can you instantiate an Interface?
在Swing中,我正在使用ActionListener
或任何其他偵聽器接口。
通常,我無法創建Interface的對象。 如果我將new運算符與任何構造函數名稱一起使用,則會創建一個對象。
我的以下代碼有問題:
jbtOK:是一些按鈕對象
ActionListener是一個接口。
如何在addActionListener
方法中使用新的ActionListener()
?
由於創建了對象。 但是,我無法從接口創建對象。
只有內部類可以嗎? 即,在內部類中,我可以創建接口的對象:
jbtOK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("hi");
}
});
使用new關鍵字,您可以將對象創建到內存中,並且在創建接口的對象對象時需要實現它。 讓我們與顯式類進行比較
假設您定義實現此ActionListener接口的類,您要做什么?
class MyActionListener implements ActionListener{
// now here you need implement all of the method which defined into the ActionListener interface
}
現在您可以使用此類以這種方式注冊Action的偵聽器
jbtOK.addActionListener(new MyActionListener());
這是顯式實現,當您直接實現時,它就是您在此處使用ActionListener接口定義的匿名類。
http://mindprod.com/jgloss/interface.html#INSTANTIATING :
您不能直接實例化接口,但是可以實例化實現接口的類。 可以通過類名,其超類名之一或接口名之一來引用對象。
還請閱讀有關匿名類的一些知識。
new class-name ( [ argument-list ] ) { class-body }
它是您要實例化並傳遞給addActionListener方法的匿名類 。 addActionListener將ActionListener作為參數,因此,由於您提供了actionPerformed方法,因此它假定您傳遞給它的匿名類是ActionListener。
嘗試更改此actionPerformed方法的名稱。 由於您傳遞的匿名類未實現ActionListener接口,因此它將不再起作用。 查看編譯器得到的錯誤消息。
如果我理解了您的問題,則不能使用接口的方法,因為接口的所有方法都是抽象的(空的,沒有實現),那么您必須實現接口請求的所有方法。
例如,由於必須將ActionListener
添加到按鈕,然后將其與actionPerformed
方法中調用的動作相關聯,因此必須在代碼的第一行中進行聲明:
public class your_class implements ActionListener
在需要關鍵字implements
的地方,表明您正在實現ActionListener
接口或任何其他接口的抽象方法,以將這些方法與您的對象一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.