版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第淺析Java中接口和抽象類的七大區(qū)別目錄接口抽象類區(qū)別1:定義關(guān)鍵字不同區(qū)別2:繼承或?qū)崿F(xiàn)的關(guān)鍵字不同區(qū)別3:子類擴(kuò)展的數(shù)量不同區(qū)別4:屬性訪問(wèn)控制符不同區(qū)別5:方法控制符不同區(qū)別6:方法實(shí)現(xiàn)不同區(qū)別7:靜態(tài)代碼塊使用不同總結(jié)Java是一門(mén)面向?qū)ο蟮木幊陶Z(yǔ)言,面向?qū)ο蟮木幊陶Z(yǔ)言有四大特征:抽象、封裝、繼承和多態(tài)。
而本文介紹的接口和抽象類就是面向?qū)ο缶幊讨小俺橄蟆钡木唧w實(shí)現(xiàn),也就是說(shuō)接口和抽象類都是用來(lái)定義實(shí)體類的公共行為的,它們是對(duì)實(shí)體類(對(duì)象)更高層次的抽象。
?說(shuō)明:本文以下內(nèi)容基于JDK8版本。
接口
接口是Java語(yǔ)言中的一個(gè)抽象類型,用于定義對(duì)象的公共行為。它的創(chuàng)建關(guān)鍵字是interface,在接口的實(shí)現(xiàn)中可以定義方法和常量,其普通方法是不能有具體的代碼實(shí)現(xiàn)的,而在JDK8之后,接口中可以創(chuàng)建static和default方法了,并且這兩種方法可以有默認(rèn)的方法實(shí)現(xiàn),如下代碼所示:
publicinterfaceInterface_1{
intcount=1;
voidsayHi();
//default方法
defaultvoidprint(){
System.out.println("Doprintmethod.");
//static方法
staticvoidsmethod(){
System.out.println("Dostaticmethod.");
}
接下來(lái),創(chuàng)建一個(gè)類來(lái)實(shí)現(xiàn)以上接口:
publicclassInterfaceImpl_1implementsInterface_1{
@Override
publicvoidsayHi(){
System.out.println("Hi,IamInterfaceImpl1.");
publicstaticvoidmain(String[]args){
InterfaceImpl_1inter=newInterfaceImpl_1();
inter.sayHi();
//調(diào)用接口中static方法
InterfaceExample.smethod();
//調(diào)用接口中的常量count
System.out.println(InterfaceExample.count);
以上程序的執(zhí)行結(jié)果如下:
通過(guò)上述代碼和執(zhí)行結(jié)果我們可以得出以下結(jié)論:
JDK8中接口可以定義static和default方法,并且這兩種方法可以包含具體的代碼實(shí)現(xiàn)。
實(shí)現(xiàn)接口要使用implements關(guān)鍵字。
接口不能直接實(shí)例化。
接口中定義的變量默認(rèn)為publicstaticfinal類型。
子類可以不重寫(xiě)接口中的static和default方法,不重寫(xiě)的情況下,默認(rèn)調(diào)用的是接口的方法實(shí)現(xiàn)。
抽象類
抽象類和接口類似,它也是用來(lái)定義對(duì)象的公共行為的,并且它也不能直接實(shí)例化,抽象類的實(shí)現(xiàn)關(guān)鍵字為abstractclass,子類用extends關(guān)鍵字繼承父類。
抽象類的使用如下:
publicabstractclassAbstractExample{
//定義普通變量
intcount=2;
//定義私有變量
privatestaticinttotal=10;
//定義抽象方法
publicabstractvoidmethodA();
//定義普通方法
publicvoidmethodB(){
System.out.println("Hi,methodB.");
接下來(lái)使用一個(gè)普通類繼承上面的抽象類:
publicclassAbstractSonextendsAbstractExample{
@Override
publicvoidmethodA(){
System.out.println("Hi,methodA.");
publicstaticvoidmain(String[]args){
AbstractSonabs=newAbstractSon();
//抽象類中的變量重新賦值
abs.count=666;
System.out.println(abs.count);
//抽象類中的抽象方法
abs.methodA();
//抽象類中的普通方法
abs.methodB();
以上程序的執(zhí)行結(jié)果如下:
通過(guò)上述代碼和執(zhí)行結(jié)果可以得出以下結(jié)論:
抽象類使用abstract關(guān)鍵字聲明。
抽象類中可以包含普通方法和抽象方法,抽象方法不能有具體的代碼實(shí)現(xiàn)。
抽象類需要使用extends關(guān)鍵字實(shí)現(xiàn)繼承。
抽象類不能直接實(shí)例化。
抽象類中屬性控制符無(wú)限制,可以定義private類型的屬性。
?接口和抽象類的區(qū)別主要體現(xiàn)在以下7個(gè)方面。
區(qū)別1:定義關(guān)鍵字不同
接口使用關(guān)鍵字interface來(lái)定義。
抽象類使用關(guān)鍵字abstract來(lái)定義。
區(qū)別2:繼承或?qū)崿F(xiàn)的關(guān)鍵字不同
接口使用implements關(guān)鍵字定義其具體實(shí)現(xiàn)。
抽象類使用extends關(guān)鍵字實(shí)現(xiàn)繼承。
區(qū)別3:子類擴(kuò)展的數(shù)量不同
接口的實(shí)現(xiàn)類可以有多個(gè),如下圖所示:
而抽象類的子類,只能繼承一個(gè)抽象類,如下圖所示,繼承多個(gè)抽象類就會(huì)報(bào)錯(cuò):
在Java語(yǔ)言中,一個(gè)類只能繼承一個(gè)父類(單繼承),但可以實(shí)現(xiàn)多個(gè)接口。
區(qū)別4:屬性訪問(wèn)控制符不同
接口中屬性的訪問(wèn)控制符只能是public,如下圖所示:
接口中的屬性默認(rèn)是publicstaticfinal修飾的。
抽象類中的屬性訪問(wèn)控制符無(wú)限制,可為任意控制符,如下圖所示:
區(qū)別5:方法控制符不同
接口中方法的默認(rèn)控制符是public,并且不能定義為其他控制符,如下圖所示:
抽象類中的方法控制符無(wú)限制,其中抽象方法不能使用private修飾,如下代碼所示:
區(qū)別6:方法實(shí)現(xiàn)不同
接口中普通方法不能有具體的方法實(shí)現(xiàn),在JDK8之后static和default方法必須有方法實(shí)現(xiàn),如下代碼所示:
從上述結(jié)果可以看出:static或default方法如果沒(méi)有方法實(shí)現(xiàn)就會(huì)報(bào)錯(cuò),而普通方法如果有方法實(shí)現(xiàn)就會(huì)報(bào)錯(cuò)。
?抽象類中普通方法可以有方法實(shí)現(xiàn),抽象方法不能有方法實(shí)現(xiàn),如下代碼所示:
從上述結(jié)果可以看出:抽象類中的普通方法如果沒(méi)有方法實(shí)現(xiàn)就會(huì)報(bào)錯(cuò),而抽象方法如果有方法實(shí)現(xiàn)則會(huì)報(bào)錯(cuò)。
區(qū)別7:靜態(tài)代碼塊使用不同
接口中不能使用靜態(tài)代碼塊,如下代碼所示:
抽象類中可以使用靜態(tài)代碼塊,如下代碼所示:
總結(jié)
接口和抽象類都是用來(lái)定義對(duì)象的公共行為的,但二者有以下7點(diǎn)不同:
定義的關(guān)鍵字不同。
子類繼承或?qū)崿F(xiàn)關(guān)鍵字不同。
類型擴(kuò)展不同:抽象類是單繼承,而接口是多繼承。
方法訪問(wèn)控制符:抽象類無(wú)限制,只是抽象類中的抽象方法不能被private修飾;而接口有限制,接口默認(rèn)的是pub
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年產(chǎn)品科學(xué)定價(jià)策略制定課程
- 2026年客戶價(jià)值精細(xì)化分層管理課
- 2026陜西西安美術(shù)學(xué)院博士教師崗位招聘28人備考題庫(kù)帶答案詳解
- 2026甘肅定西市臨洮縣消防救援大隊(duì)補(bǔ)錄政府專職消防員4人備考題庫(kù)及完整答案詳解
- 2026浙江錢(qián)江實(shí)驗(yàn)室有限公司招聘3人備考題庫(kù)及一套參考答案詳解
- 2026青海黃南州同仁市公益性崗位招聘21人備考題庫(kù)完整答案詳解
- 機(jī)械行業(yè)中東天然氣設(shè)備:內(nèi)需出口雙驅(qū)擴(kuò)產(chǎn)“開(kāi)采-處理-儲(chǔ)運(yùn)-應(yīng)用”共赴出海
- 提升護(hù)理同質(zhì)化與個(gè)體化
- 籃球館老板年終總結(jié)(3篇)
- 2022~2023二級(jí)建造師考試題庫(kù)及答案第330期
- 對(duì)外話語(yǔ)體系構(gòu)建的敘事話語(yǔ)建構(gòu)課題申報(bào)書(shū)
- 馬年猜猜樂(lè)(馬的成語(yǔ))打印版
- 精神障礙防治責(zé)任承諾書(shū)(3篇)
- 2025年擔(dān)保公司考試題庫(kù)(含答案)
- 實(shí)施指南(2025)《HG-T3187-2012矩形塊孔式石墨換熱器》
- 2025年江西省高考物理試卷真題(含答案及解析)
- TCOSOCC016-2024信息技術(shù)應(yīng)用創(chuàng)新軟件測(cè)試要求
- 介入病人安全管理
- 人教版PEP五年級(jí)英語(yǔ)下冊(cè)單詞表與單詞字帖 手寫(xiě)體可打印
- 戶口未婚改已婚委托書(shū)
- 家具制造廠家授權(quán)委托書(shū)
評(píng)論
0/150
提交評(píng)論