由於Java 9將允許我們在接口中定義private
和private static
方法,因此interface
和class
的剩餘差異是什麼?另外,Java是否正朝着多重繼承緩慢發展?Java 9接口vs類
29
A
回答
35
Java 9中的私有接口方法的行爲與其他私有方法完全相同:它們必須具有正文(即使在抽象類中),既不能被子類調用也不能被子類重寫。因此,它們並不真正與繼承進行交互。其中(特別是多重繼承)的聊天,有(至少?)三種的它:
- 的類型繼承意味着一個類型可以是另一種類型,例如
String
是Object
。 Java允許從第一天開始通過類型的多重繼承(通過接口)。 - 行爲的繼承意味着一種類型可以繼承另一種類型的行爲。在Java 8之前,只有類可以實現方法,所以只有這種類型的單一繼承。使用Java 8的默認方法,允許接口實現方法,從而爲Java提供多重行爲繼承。
- 繼承狀態意味着一個類型繼承另一個類型的內部狀態(即字段)。就目前而言(Java 9和當前爲未來的Java版本提出的一切),只有類可以具有狀態,因此只有這種類型的單一繼承。
正如你所看到的私人界面方法不會在這裏添加任何東西。
關於如何比較接口和類的問題,有兩個主要區別:多重繼承和狀態。接口支持前者,類可以具有後者。由於國家在典型的面向對象方面很重要,所以類仍然是相關的。
如果有一種方法讓接口強制實現具有特定的非公有領域或者直接定義一個接口本身,則遊戲會發生變化,接口可能會與類競爭。
27
私有方法不會被子類繼承,所以此功能不會影響實現類。我相信接口中的私有方法允許我們在默認方法之間共享代碼。
Java接口仍然不能有非靜態成員。這是一個很大的差異,而不是多重繼承IMO。
19
Java 9接口仍然不能包含字段和構造函數。這在類和接口之間產生了巨大的差異,所以Java 9遠沒有多重繼承。
2
版本9中的Java接口具有私有方法,但具有靜態私有方法。該功能已被引入以允許模塊化方法。一個功能應該與一個責任一起工作,而不是使用冗長的缺省方法。它與多個繼承無關。 更私有的靜態方法,您將能夠編寫乾淨且可重用的代碼的次數越多。無論如何,靜態方法無論是public還是protected都不能被覆蓋。
相關問題
- 1. Java接口VS類的返回類型
- 2. 接口:php vs java
- 3. Java類接口類
- 4. 接口vs類的實例
- 5. 接口vs 100%抽象類
- 6. java.util包 - 類vs接口
- 7. Class Vs抽象類與Vs接口
- 8. 性能對類裝載VS Java接口中的接口加載的影響8
- 9. REST是API還是:REST vs Java接口?
- 10. 具體類vs接口:何時使用?
- 11. 結構VS類實現一個接口
- 12. 通用接口VS接口,用於每種類型的
- 13. 使用接口,2 Java類
- 14. java中的類型接口
- 15. java中的gui接口類?
- 16. Java ArrayList接口類型
- 17. Java本地類和接口
- 18. Java的鑄造接口類
- 19. 接口和Java中的類
- 20. SKSpriteNode子類。的iOS 8.4 VS 9.x中
- 21. Java泛型:接受類或接口
- 22. java類和接口的類型
- 23. 類實例VS接口VS通用對象 - 性能
- 24. JNA直接vs接口映射?
- 25. Java 9中接口方法的默認訪問修飾符?
- 26. Java-接口使用接口
- 27. java中的接口接口
- 28. Klocwork 9 vs Klocwork 12
- 29. 接口類與類
- 30. 接口建築 - UIViews VS圖片VS核芯顯卡VS PDF子類
我很驚訝,有這麼多upvotes ...剩餘的區別:'protected'支持,'package-private'支持,**基本上除了'private'和'static' **外所有內容。接口不能擴展類,保留關鍵字'interface'和'class ',*兩者的存在理念/目的/理由..可能繼續下去.. –
@VinceEmigh我明白你的關注。但是在我職業生涯剛開始的時候有人告訴我:「沒有問題是愚蠢的」。而且我知道所有包括你在內的人都會理解這一點。 – Aakash
答案仍然與[默認方法與Java 8中的抽象類的接口](https://stackoverflow.com/q/19998454/2711488)中的相同,只是在接口中可以有'private'方法,這顯然不會對其他班級產生影響。 – Holger