2011-03-18 212 views
5

東西我見過很多,但從來沒有想過要懷疑它...在Java 接口,之間有什麼區別:抽象方法

public void myMethod(); 

public abstract void myMethod(); 

我瞭解Java類中抽象關鍵字的用途,但它在接口中的用途是什麼(如果有的話)?

回答

12

兩個聲明是完全一樣的,所有接口的方法沒有實現(是抽象)因此abstract關鍵字是多餘的。在我看來,在這種情況下編寫abstract會增加代碼的冗長度。

+4

修飾符public也是多餘的。 – Jcs 2011-03-18 10:45:01

+0

@Jcs是的。 – nan 2011-03-18 10:47:12

8

所有方法聲明在一個接口都publicabstract。沒有一點指出它。

只有void myMethod();真的需要在這裏。

6

Java Specification:

  • 9.4抽象方法聲明 .. .. ..

在接口的身體 每個方法的聲明是隱含 抽象的,所以它的身體始終是 由分號表示,而不是 塊。

在接口的身體 每一個方法的聲明是隱式公開。

+0

+1爲鏈接到官方JLS就此事說。 – mjuarez 2013-02-07 18:17:14

2

publicabstract在這裏是多餘的。我個人更喜歡忽略它們,因爲在我看來,它們在這種情況下都是嘈雜的。

雖然你可以,當然包括他們,我覺得這是完全合理的假設,任何人閱讀你的代碼知道,在一個界面中的所有方法必須是公共的和抽象的 - 這是一個很好理解的特徵。

1

前面已經說了接口的方法是publicabstract。現在discouraged指定他們爲公衆摘要:

爲了與舊版本的Java平臺的兼容性,允許但不鼓勵,作爲一個風格問題,以冗餘指定的接口聲明的方法abstract修飾符。

它是允許的,但強烈建議不要作爲一個風格問題,以冗餘指定的接口方法public修飾符。

而對於完整性interface fields ARE publicstaticfinal ...

+0

感謝您的有用鏈接,添加「public abstract」是最新的Eclipse重構工具中的默認行爲,這很奇怪。 – seanhodges 2011-03-21 16:44:16

0

儘管您可以明確聲明,但接口中的所有方法都是隱式公開和抽象的。編譯器只會在你試圖使它們不是抽象的(通過提供body)和私有的情況下才會抱怨。