簡體   English   中英

您如何實例化一個接口?

[英]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.

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