Java abstract class 與 interface對比
Java abstract class 與 interface對比
前言
abstract class和interface都是Java用來描述抽象體的,不知道是否有同學跟我一樣對這兩者的語法層面的區(qū)別以及如何選擇這兩者還存在著疑惑,反正接下來,讓我詳細介紹一下abstract class和interface。
理解抽象類
在面向對象的概念中,所有的對象都是通過類來描述的。但是反過來卻不是這樣,并不是所有的類都是用來描述對象的。因為這個類中可能沒有足夠的信息來描述一個具體的對象,這樣的類就是抽象類(ps:注意這里的抽象類不是單指abstract class)。抽象類往往用來描述我們對問題領域進行分析和設計后得出來的抽象概念,是對一系列看上去不同,但是本質相同的具體概念的抽象。
abstract class 和 interface語法區(qū)別
抽象類和接口的區(qū)別如下:
- 抽象類可以有普通的成員變量,而接口中一般沒有成員變量。如果非要在接口中安插成員變量,則成員變量的類型必須為static final類型。
- 抽象類中可以包含非抽象的普通方法,而接口中的所有方法都必須是抽象的。
- 抽象類中的抽象方法的訪問類型可以是public、protected或者包訪問類型。而接口中的抽象方法只能是public abstract類型,接口的方法前面可以不加修飾符,默認就是public abstract類型。
- 一個類可以實現(xiàn)多個接口(多繼承的折衷實現(xiàn)),但是只能繼承一個抽象類。
abstract class和interface的使用區(qū)別
abstract class的設計體現(xiàn)了”is-a”的關系,而interface體現(xiàn)的是”has-a”的關系。
什么時候使用接口?
你想擴展我給你的東西,就必須實現(xiàn)必需的接口。例如,實現(xiàn)Comparable接口的對象可以直接使用sort方法Collections.sort(List list)排序。
什么時候使用抽象類?
如果你有一個抽象類,它提供了很多通用的功能,并且抽象出了每個子類需要自己去實現(xiàn)的方法。而你設計的東西恰好基于這個類,那這個實現(xiàn)你就可以去繼承這個抽象類,然后實現(xiàn)自己獨特的方法。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
解決參數命名不規(guī)范,造成使用@NotNull進行校驗出現(xiàn)的問題
這篇文章主要介紹了解決參數命名不規(guī)范,造成使用@NotNull進行校驗出現(xiàn)的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01Spring Security 實現(xiàn)用戶名密碼登錄流程源碼詳解
在服務端的安全管理使用了Spring Security,用戶登錄成功之后,Spring Security幫你把用戶信息保存在Session里,但是具體保存在哪里,要是不深究你可能就不知道,今天小編就帶大家具體了解一下Spring Security實現(xiàn)用戶名密碼登錄的流程2021-11-11IDEA最新激活碼2021(IDEA2020.3.2最新永久激活方法)
這篇文章主要介紹了IDEA最新激活碼2021(IDEA2020.3.2最新永久激活方法),本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12