2016-01-24 109 views
6

我看到它寫在大多數地方 -接口抽象的所有方法?

"All of the methods in an interface are abstract." 

但是接口也可以包含default methodsstatic methods和方法體存在默認的方法和靜態方法。

那麼界面抽象的所有方法都是這樣嗎?

+4

Android尚未使用Java 8 **,但是目前沒有默認方法;全部抽象。 –

回答

6

這是正確的

其所有的方法都是抽象的訪問修飾符,irregardless。

一個完美的解釋由@coder

接口就像是一個 「純粹的」 抽象類。該類和所有其方法是抽象的。一個抽象類可以實現 方法,但該類本身不能實例化(可用於繼承和DRY之後的 )。

對於一個接口,由於沒有任何實現,他們是 對他們的目的有用:合同。如果你實現接口 那麼你必須在接口中實現這些方法。

所以區別是抽象類可以實現方法 而接口不能。

他們分開的原因是一個班級可以實現幾個 接口。 Java和C#將一個類限制爲單個父類的固有類。有些語言允許你繼承多個類,你可以通過一個「純粹」的抽象類完成一個接口的工作。但是多重繼承有它的問題, 即可怕的鑽石問題

看一看Oracle的文檔上Abstract methods and classes.

6

從Java 8,接口也可以包含默認的方法,並用抽象方法以及靜態方法。方法體存在默認和靜態方法。

Java 8最大的設計變化之一是與 接口的概念。在Java 7之前,我們只能在 的接口中使用方法聲明。但是從Java 8開始,我們可以在接口中使用默認方法和靜態方法。

接口的默認方法

對於接口中創建一個默認的方法,我們需要使用 「默認」的關鍵字與方法簽名。

接口靜態方法

靜態方法是類似的違約只是我們不能 重寫它們在實現類的方法。此功能可幫助我們在 中避免因子 類中實施不當而導致的不良結果。

欲瞭解更多請查看this

0

接口中的所有方法都是抽象的。這個陳述是真的。 接口必須具有抽象方法才能應用多重繼承。

-1

接口中的所有方法摘要,默認情況下在JAVA領域的靜態公共最終 和所有的成員都公共

並且我們不能讓接口的成員專用受保護

0

根據Jeanne Boyarsky的說法,這是錯誤的& Scott Selikoff的書OCA:Oracle®Certified Associate Java SE 8 Programmer I學習指南考試1Z0-808。

。 。 。因爲在Java 8之前,假定所有接口方法 都是抽象的。由於Java 8現在包含默認方法和靜態方法,並且它們從不抽象,所以不能假定編譯器將抽象修飾符隱式應用於所有方法。 (本書的第346頁)

0

java接口中的所有方法都是抽象的,只有當它們顯式聲明爲靜態時o默認情況下它們不是抽象的。