jdk8 接口抽象类区别_JDK 8时代的抽象类与接口
jdk8 接口抽象類區別
在新的Java 8日期和時間API:Stephen Colebourne的訪談中 , Stephen Colebourne告訴Hartmut Schlosser :“我認為最重要的語言更改不是lambda,而是接口上的靜態和默認方法?!?Colebourne補充說:“添加默認方法消除了使用抽象類的許多原因。” 在閱讀本文時,我意識到Colebourne是正確的,并且當前使用抽象類的許多情況都可以用JDK 8默認方法的接口替換。 這在Java世界中非常重要,因為抽象類和接口之間的差異一直是困擾新Java開發人員試圖理解差異的問題之一。 在許多方面,在JDK 8中區分兩者甚至更加困難。
在線論壇和博客中有許多示例,討論了Java接口和抽象類之間的區別。 這些包括但不限于JavaWorld的Abstract類與interfaces , StackOverflow的何時必須使用接口代替抽象類? , 接口和抽象類之間的區別 ,Java中的10個抽象類和接口面試問題 ,曾經有用且有用的答案,現在它們中的許多已經過時了,對于那些剛開始使用Java的Java初學者來說,這可能會更加困惑JDK 8的Java經驗。
當我在思考JDK 8世界中Java接口和抽象類之間的其余差異時,我決定看看Java教程對此有何看法。 本教程已更新為反映JDK 8,并且抽象方法和類具有稱為“與接口相比的抽象類”的部分,該部分已進行了更新以合并JDK8。本節指出了JDK 8接口與抽象類的異同。 。 它強調的區別是數據成員和方法的可訪問性:抽象類允許非靜態和非最終字段,并允許方法是公共的,私有的或受保護的,而接口的字段本質上是公共的,靜態的和最終的,以及所有接口方法本質上是公共的。
Java教程繼續列出了何時應該考慮抽象類以及何時應該考慮接口的項目符號。 毫不奇怪,它們源自前面提到的差異,并且主要與是否需要將字段和方法設置為私有,受保護,非靜態或最終(喜歡抽象類)或是否需要專注于鍵入的能力有關。無需考慮實現(偏好接口)。
因為Java允許一個類實現多個接口但僅擴展一個類,所以當特定實現需要與多種類型關聯時,可以認為該接口是有利的。 由于JDK 8的默認方法,這些接口甚至可以為實現提供默認行為。
一個自然的問題可能是:“ Java如何處理實現兩個接口的類,這兩個接口都描述具有相同簽名的默認方法?” 答案是這是編譯錯誤。 在下一個屏幕快照中顯示了該快照,該快照顯示了當我的類實現兩個接口時每個NetBeans 8報告錯誤的情況,每個接口定義了具有相同簽名[ String speak() ]的默認方法。
如上面的屏幕快照所示,顯示了一個編譯器錯誤,指出“類...從類型…和…繼承…的不相關默認值”(其中,類名,默認方法名和兩個接口名是消息中指定的名稱) )。 Peter Verhas撰寫了一篇詳細的文章(“ Java 8默認方法:可以做什么和不能做什么? ”),探討了與帶有相同方法的具有默認方法名稱的多重實現接口相關的一些極端情況(陷阱)。
結論
可以說,JDK 8帶來了抽象類相對于接口的最大優勢。 這樣做的含義是,當今使用的大量抽象類很可能會被具有默認方法的接口所取代,而許多將來可能是抽象類的構造現在將成為具有默認方法的接口。
翻譯自: https://www.javacodegeeks.com/2014/04/abstract-class-versus-interface-in-the-jdk-8-era.html
jdk8 接口抽象類區別
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的jdk8 接口抽象类区别_JDK 8时代的抽象类与接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三国战纪安卓版(三国战纪安卓)
- 下一篇: -javaagent:_从javaage