Java abstract class 與 interface對(duì)比
Java abstract class 與 interface對(duì)比
前言
abstract class和interface都是Java用來(lái)描述抽象體的,不知道是否有同學(xué)跟我一樣對(duì)這兩者的語(yǔ)法層面的區(qū)別以及如何選擇這兩者還存在著疑惑,反正接下來(lái),讓我詳細(xì)介紹一下abstract class和interface。
理解抽象類(lèi)
在面向?qū)ο蟮母拍钪?,所有的?duì)象都是通過(guò)類(lèi)來(lái)描述的。但是反過(guò)來(lái)卻不是這樣,并不是所有的類(lèi)都是用來(lái)描述對(duì)象的。因?yàn)檫@個(gè)類(lèi)中可能沒(méi)有足夠的信息來(lái)描述一個(gè)具體的對(duì)象,這樣的類(lèi)就是抽象類(lèi)(ps:注意這里的抽象類(lèi)不是單指abstract class)。抽象類(lèi)往往用來(lái)描述我們對(duì)問(wèn)題領(lǐng)域進(jìn)行分析和設(shè)計(jì)后得出來(lái)的抽象概念,是對(duì)一系列看上去不同,但是本質(zhì)相同的具體概念的抽象。
abstract class 和 interface語(yǔ)法區(qū)別
抽象類(lèi)和接口的區(qū)別如下:
- 抽象類(lèi)可以有普通的成員變量,而接口中一般沒(méi)有成員變量。如果非要在接口中安插成員變量,則成員變量的類(lèi)型必須為static final類(lèi)型。
- 抽象類(lèi)中可以包含非抽象的普通方法,而接口中的所有方法都必須是抽象的。
- 抽象類(lèi)中的抽象方法的訪問(wèn)類(lèi)型可以是public、protected或者包訪問(wèn)類(lèi)型。而接口中的抽象方法只能是public abstract類(lèi)型,接口的方法前面可以不加修飾符,默認(rèn)就是public abstract類(lèi)型。
- 一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口(多繼承的折衷實(shí)現(xiàn)),但是只能繼承一個(gè)抽象類(lèi)。
abstract class和interface的使用區(qū)別
abstract class的設(shè)計(jì)體現(xiàn)了”is-a”的關(guān)系,而interface體現(xiàn)的是”has-a”的關(guān)系。
什么時(shí)候使用接口?
你想擴(kuò)展我給你的東西,就必須實(shí)現(xiàn)必需的接口。例如,實(shí)現(xiàn)Comparable接口的對(duì)象可以直接使用sort方法Collections.sort(List list)排序。
什么時(shí)候使用抽象類(lèi)?
如果你有一個(gè)抽象類(lèi),它提供了很多通用的功能,并且抽象出了每個(gè)子類(lèi)需要自己去實(shí)現(xiàn)的方法。而你設(shè)計(jì)的東西恰好基于這個(gè)類(lèi),那這個(gè)實(shí)現(xiàn)你就可以去繼承這個(gè)抽象類(lèi),然后實(shí)現(xiàn)自己獨(dú)特的方法。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Java框架入門(mén)之簡(jiǎn)單介紹SpringBoot框架
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著SpringBoot框架展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
JAVA大作業(yè)之圖書(shū)管理系統(tǒng)實(shí)現(xiàn)全解
隨著網(wǎng)絡(luò)技術(shù)的高速發(fā)展,計(jì)算機(jī)應(yīng)用的普及,利用計(jì)算機(jī)對(duì)圖書(shū)館的日常工作進(jìn)行管理勢(shì)在必行,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)圖書(shū)管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2022-01-01
java學(xué)習(xí)筆記之eclipse+tomcat 配置
俗話說(shuō):工欲善其事必先利其器,既然要學(xué)習(xí)java,首先把java的開(kāi)發(fā)環(huán)境搗鼓一下吧,這里我們來(lái)談?wù)別clipse+tomcat的配置方法。2014-11-11
idea創(chuàng)建SpringBoot項(xiàng)目及注解配置相關(guān)應(yīng)用小結(jié)
Spring Boot是Spring社區(qū)發(fā)布的一個(gè)開(kāi)源項(xiàng)目,旨在幫助開(kāi)發(fā)者快速并且更簡(jiǎn)單的構(gòu)建項(xiàng)目,Spring Boot框架,其功能非常簡(jiǎn)單,便是幫助我們實(shí)現(xiàn)自動(dòng)配置,本文給大家介紹idea創(chuàng)建SpringBoot項(xiàng)目及注解配置相關(guān)應(yīng)用,感興趣的朋友跟隨小編一起看看吧2023-11-11
java正則匹配HTML中a標(biāo)簽里的中文字符示例
這篇文章主要介紹了java正則匹配HTML中a標(biāo)簽里的中文字符,涉及java中文正則及HTML元素操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01
SpringBoot?實(shí)現(xiàn)流控的操作方法
本文介紹了限流算法的基本概念和常見(jiàn)的限流算法,包括計(jì)數(shù)器算法、漏桶算法和令牌桶算法,還介紹了如何在Spring?Boot中使用Guava庫(kù)和自定義注解以及AOP實(shí)現(xiàn)接口限流功能,感興趣的朋友一起看看吧2024-12-12

