我正在學習java swing,並且遇到了匿名內部類的概念。在研究了一下這個link後,我覺得匿名內部類必須總是擴展一些其他的類,因爲它作爲參數傳遞的方法是預定義的。至多,如果一個方法接受Object實例作爲參數,那麼我們只能創建一個匿名的獨立內部類。我只是尋求你的意見,我是否正確。如果你能提供一些例子,這將是有幫助的。 在此先感謝。匿名內部類必須擴展一些超類?
3
A
回答
1
創建匿名內部類而不擴展任何內容基本上意味着你沒有辦法與之交談。
您需要擴展一個類或實現一個接口,以便爲您的對象提供已知的方法進行交談,例如;
myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
// do something here.
}
});
去跟那個對象的實例的唯一方法是通過已知的ActionListener方法(這恰好是完全addActionListener方法,需要的方法),你會添加任何其他的方法就只能是訪問內對象本身。如果你不需要擴展/實現任何東西,任何方法都不能從外部訪問。
2
內部類的目的是以可以從其他地方使用的方式「打包」操作的實現。當您將一段代碼傳遞給一個可以將控制權交還給您的方法時,您可以實現回調的概念。
基類/接口用於爲該段代碼提供訪問點。您和您調用的方法通過同意接口的內容(實際上是任何類)必須實現的目標方法才能夠回撥您的回調方法的名稱和簽名達成一致。
更具體地說,爲了讓窗口回調窗口監聽器,您必須同意windowClosing
方法的名稱和簽名。你通過實現一個接口來做到這一點。
在極少數情況下,當目標方法由java.lang.Object
(例如toString
)執行時,您可以從頂級Object
派生您的命名或匿名內部類。
3
每個類必須擴展一些超類。 只有例外是java.lang.Object
,這是頂級的,因此不能有有超類。匿名內部類在這方面沒有什麼不同。
0
你是對你的說法,即類,通過它你讓匿名內部類 繼承該類自動在這種情況下,匿名類繼承C類
class C
{
void one()
{
System.out.println("***************************\n********");
}
}
class three
{
public static void main(String args[])
{
C obj=new C(){
void one()
{
System.out.println("//////////////");
}
};
obj.one();
}
}
相關問題
- 1. 創建擴展其他類內部匿名類
- 2. 匿名內部類
- 3. 擴展內部類
- 4. 必須有Emacs擴展名?
- 5. Class org.springframework.web.jsf.el.SpringBeanFacesELResolver必須擴展javax.el.ELResolver類型
- 6. 超級VS這個當內部類擴展外部類
- 7. 從Java匿名內部類
- 8. 匿名內部類接口
- 9. 聲明匿名內部類
- 10. java.lang.NoClassDefFoundError:在匿名內部類
- 11. 從內部匿名類
- 12. 獲取匿名或內部類的超類
- 13. 在Java中,匿名類可以擴展另一個類嗎?
- 14. 匿名類變成內部類
- 15. 關於匿名類vs匿名內部類的困惑
- 16. 由另一個內部類擴展的內部類
- 17. 匿名內部類(優於非匿名內部類)的優點是什麼?
- 18. 階:缺少參數類型擴展功能:參數類型的匿名函數必須充分了解
- 19. 成員變量必須擴展類A並實現一些接口
- 20. 必須C庫有.lib擴展名
- 21. 爲什麼必須導入內部類?
- 22. 定義一個協議來實現類必須從一些超級類
- 23. PHP類擴展超過內存 - CodeIgniter
- 24. 命名幾個擴展線程類的內部類?
- 25. 關鍵字用於外類從一個匿名內部類
- 26. Java:從匿名類獲取超類
- 27. PHPUnit_Framework_Assert :: assertClassHasStaticAttribute()必須是類名
- 28. Python中的匿名內部類
- 29. Spring AOP的匿名內部類
- 30. 收集操作與匿名內部類
所以我得到的是匿名內部類只能是用於覆蓋其超類的方法。 –