2015-02-24 105 views
0

我知道接口變量總是靜態的,因爲我們不能創建接口的對象。但爲什麼不抽象類變量總是靜態的?我們不能抽象類的對象爲什麼接口變量總是靜態的,爲什麼不抽象類總是靜態的?

+2

我猜想接口更多地是關於方法(行爲)而不是領域(狀態),並且引入的領域只是爲了使組織常量更容易。我懷疑如果在Java的第一個版本中引入枚舉器件,我們甚至不會在接口中使用常量。 – Pshemo 2015-02-24 01:42:00

+0

有關更多背景信息,您可能需要閱讀['接口'認爲有害]「(http://blog.cleancoder.com/uncle-bob/2015/01/08/InterfaceConsideredHarmful.html)。 – 2015-02-24 02:03:46

+0

@Steve C,他們有沒有「無符號的有害的」,以及?;) – Matthieu 2015-02-24 02:14:48

回答

0

這是因爲抽象類的字段然後被所有的子類繼承並可以被它們使用。因此,您可以在抽象類中實現處理與這些字段相關的邏輯的方法。您可以將抽象類視爲部分完成的實現;因爲它是部分完成的,所以它在子類完成之前不能被構造。

0

它全部由implementsextends關鍵詞解釋:你實現的接口用的功能但延伸的(潛在的抽象)類的能力。

因爲你是延伸,你繼承了你的實例中的所有字段和方法。 只要你擴展它,你就有一個抽象類的實例:你正在向它添加/改變功能,而一個接口只是一個空殼,你必須用行爲「填充」。

0

接口和抽象類之間的主要區別是, - 接口只是合同,他們是指定的,他們的後續具體實施必須方法的簽名,並在一個界面中的所有方法隱含地是abstract

相比之下,抽象類是類,它們可以有默認實現的非抽象方法。

如從JLS for the definition of an interface引述:

接口的聲明引入了一個新的引用類型的成員是類,接口,常量和抽象方法。這種類型沒有實現,但是不相關的類可以通過爲其抽象方法提供實現來實現它。

the definition of an abtract class

一個抽象類是一類不完全,或者被認爲是不完整的。

雖然接口沒有做任何東西,除了指定實現它們的類的圖案,抽象類可以做更多的 - 你可以定義自己的行爲 - 因此,你實際上可以提供具體的實現自己的方法以及定義自己狀態(即實例變量)。

相關問題