2011-11-17 256 views
0

在Swing中,我使用的是ActionListener或任何其他Listener接口。如何實例化一個接口?

通常我不能創建接口的對象。 如果我使用具有任何構造函數名稱的new運算符創建一個對象。

我有一個問題,我下面的代碼:

jbtOK:一些按鈕對象

的ActionListener是一個接口。

如何在addActionListener方法中使用新的ActionListener()

由於創建了一個對象。但是,我無法從界面創建對象。

它只能在內部類中使用嗎?即,在內部類我可以創建接口的對象:

jbtOK.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 

     System.out.println("hi"); 
     } 
    }); 
+4

這是一個問題,沒有任何研究 – Kowser

+1

這不是一個壞問題。這只是非常公式化。 sri問:「如何實例化接口?我們已經瞭解到接口不是類!」 –

+0

初學者的好問題,每個人都有第一次!然而,在這裏問這是一個很好的實踐研究... – Charliemops

回答

1

http://mindprod.com/jgloss/interface.html#INSTANTIATING

你不能直接實例化的接口,但可以實例化一個實現了接口的類。對一個對象的引用可以通過類名,通過它的一個超類名或者它的一個接口名。

請閱讀關於匿名類的一些內容。

new class-name ([ argument-list ]) { class-body } 

這是你實例化和傳遞到您的addActionListener方法,方法的匿名類。 addActionListener接受一個ActionListener作爲參數,所以既然你提供了一個actionPerformed方法,它假定你傳遞給它的匿名類是一個ActionListener。

嘗試更改此actionPerformed方法的名稱。由於您傳遞的匿名類沒有實現ActionListener接口,因此它將不再工作。查看編譯器獲得的錯誤消息。

3

關鍵字你創建對象到內存中,當你創建一個接口的對象對象需要實現。讓我們比較明確的類

假設你定義了實現這個ActionListener接口的類你做了什麼?

class MyActionListener implements ActionListener{ 
    // now here you need implement all of the method which defined into the ActionListener interface 
} 

現在你可以使用這個類來註冊監聽行動像這樣

jbtOK.addActionListener(new MyActionListener()); 

這是明確的執行和直接執行,它被稱爲匿名類作爲您ActionListener接口

這裏定義
+0

是的,我認爲他已經忘記了「實現ActionListener」這個詞。 – Charliemops

1

如果我理解你的問題,你不能使用接口的方法,因爲接口的所有方法都是抽象的(空的,沒有實現),那麼你必須實現你的接口所要求的所有方法。

例如,因爲你有一個ActionListener添加一個按鈕,然後將它關聯到叫actionPerformed方法操作,你必須在你的代碼的第一行聲明:

public class your_class implements ActionListener 

凡關鍵字需要implements來指示您正在實現接口或任何其他接口的抽象方法,以將這些方法與您的對象一起使用。

相關問題