我知道接口變量總是靜態的,因爲我們不能創建接口的對象。但爲什麼不抽象類變量總是靜態的?我們不能抽象類的對象爲什麼接口變量總是靜態的,爲什麼不抽象類總是靜態的?
0
A
回答
0
這是因爲抽象類的字段然後被所有的子類繼承並可以被它們使用。因此,您可以在抽象類中實現處理與這些字段相關的邏輯的方法。您可以將抽象類視爲部分完成的實現;因爲它是部分完成的,所以它在子類完成之前不能被構造。
0
它全部由implements
與extends
關鍵詞解釋:你實現的接口用的功能但延伸的(潛在的抽象)類的能力。
因爲你是延伸,你繼承了你的實例中的所有字段和方法。 只要你擴展它,你就有一個抽象類的實例:你正在向它添加/改變功能,而一個接口只是一個空殼,你必須用行爲「填充」。
0
接口和抽象類之間的主要區別是, - 接口只是合同,他們是指定的,他們的後續具體實施必須方法的簽名,並在一個界面中的所有方法隱含地是abstract
。
相比之下,抽象類是類,它們可以有默認實現的非抽象方法。
如從JLS for the definition of an interface引述:
接口的聲明引入了一個新的引用類型的成員是類,接口,常量和抽象方法。這種類型沒有實現,但是不相關的類可以通過爲其抽象方法提供實現來實現它。
和the definition of an abtract class:
一個抽象類是一類不完全,或者被認爲是不完整的。
雖然接口沒有做任何東西,除了指定實現它們的類的圖案,抽象類可以做更多的 - 你可以定義自己的行爲 - 因此,你實際上可以提供具體的實現自己的方法以及定義自己狀態(即實例變量)。
相關問題
- 1. 爲什麼接口變量在Java中是隱式靜態的?
- 2. 靜態變量和靜態變量的區別是什麼?
- 3. 聲明靜態變量時的輸出是什麼?爲什麼?
- 4. 爲什麼說方法不是靜態時它是靜態的?
- 5. 非靜態類實例中的c#靜態變量的行爲是什麼?
- 6. 什麼是java中的靜態接口?
- 7. 爲什麼QDir :: rmdir不是靜態的?
- 8. 爲什麼Char.MinVal/.MaxVal不是靜態的?
- 9. 爲什麼靜態變量不好?
- 10. 什麼是「靜態」?
- 11. 在C++中,接口類,靜態類和抽象類是什麼意思?
- 12. 爲什麼CanvasRenderingContext2D.createLinearGradient()不是靜態函數?
- 13. 爲什麼getAppProperty()不是靜態方法?
- 14. 爲什麼不聲明每個變量都是靜態的
- 15. 爲什麼不是這個靜態c#變量改變?
- 16. 什麼是靜態方法和變量?
- 17. 爲什麼靜態HashMap中總是空以下情況下
- 18. 爲什麼抽象類不能被密封或靜態?
- 19. 爲什麼ServerSocket.setSocketFactory是靜態的?
- 20. 爲什麼Ajax pagemethods是靜態的
- 21. 爲什麼SerialVersionUID是靜態的
- 22. 爲什麼Vector。計數是靜態的?
- 23. 爲什麼接口方法不能是「靜態」和「最終」?
- 24. 爲什麼類中的靜態變量給出鏈接錯誤?
- 25. 爲什麼Java的ThreadLocal的變量是靜態的
- 26. 什麼類型的變量不能是靜態的?
- 27. 非靜態...靜態是什麼?
- 28. 靜態接口變量得到繼承.........爲什麼?
- 29. 爲什麼linux內核中的全局變量是靜態的?
- 30. 爲什麼Object.create使我的私有變量是靜態的?
我猜想接口更多地是關於方法(行爲)而不是領域(狀態),並且引入的領域只是爲了使組織常量更容易。我懷疑如果在Java的第一個版本中引入枚舉器件,我們甚至不會在接口中使用常量。 – Pshemo 2015-02-24 01:42:00
有關更多背景信息,您可能需要閱讀['接口'認爲有害]「(http://blog.cleancoder.com/uncle-bob/2015/01/08/InterfaceConsideredHarmful.html)。 – 2015-02-24 02:03:46
@Steve C,他們有沒有「無符號的有害的」,以及?;) – Matthieu 2015-02-24 02:14:48