背景
工作也有四年了,基礎(chǔ)的東西許久不看有些遺忘。一起來復(fù)習(xí)一下吧
語法區(qū)別
構(gòu)造方法:抽象類可以有構(gòu)造方法,接口中不能有構(gòu)造方法
成員變量:抽象類和接口中都可以包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,并且默認即為public static final類型。
普通成員變量:抽象類中可以有普通成員變量,接口中沒有普通成員變量
普通方法:抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的方法聲明,不能有非抽象的普通方法
靜態(tài)方法:抽象類中可以包含靜態(tài)方法,接口中不能包含靜態(tài)方法(JDK1.8中開始接口中可以定義 公開靜態(tài)方法,擁有方法體,接口名直接調(diào)用)
訪問權(quán)限:抽象類中的抽象方法的訪問類型可以是public,protected和(默認類型,雖然eclipse下不報錯,但應(yīng)該也不行),但接口中的抽象方法只能是public類型的,并且默認即為public abstract類型。
與類關(guān)系:一個類可以實現(xiàn)多個接口,但只能繼承一個抽象類。
應(yīng)用場景
接口(interface)應(yīng)用場景
1.類與類之前需要特定的接口進行協(xié)調(diào),而不在乎其如何實現(xiàn)。
作為能夠?qū)崿F(xiàn)特定功能的標識存在,也可以是什么接口方法都沒有的純粹標識。
2.需要將一組類視為單一的類,而調(diào)用者只通過接口來與這組類發(fā)生聯(lián)系。
3.需要實現(xiàn)特定的多項功能,而這些功能之間可能完全沒有任何聯(lián)系。
抽象類(abstract class)應(yīng)用場景
1.定義了一組接口,但又不想強迫每個實現(xiàn)類都必須實現(xiàn)所有的接口??梢杂胊bstract class定義一組方法體,甚至可以是空方法體,然后由子類選擇自己所感興趣的方法來覆蓋。
2.某些場合下,只靠純粹的接口不能滿足類與類之間的協(xié)調(diào),還必需類中表示狀態(tài)的變量來區(qū)別不同的關(guān)系。abstract的中介作用可以很好地滿足這一點。
3.規(guī)范了一組相互協(xié)調(diào)的方法,其中一些方法是共同的,與狀態(tài)無關(guān)的,可以共享的,無需子類分別實現(xiàn);而另一些方法卻需要各個子類根據(jù)自己特定的狀態(tài)來實現(xiàn)特定的功能。
總結(jié)
任何抽象類都應(yīng)該適應(yīng)真正的需求而產(chǎn)生的。
比如:所有的門都可以開關(guān),就可以抽象。但有的門有門鈴,有的門是智能門鎖,這種就需要接口來實現(xiàn)。文章來源:http://www.zghlxwxcb.cn/news/detail-465699.html
另外,抽象類是為了代碼邏輯復(fù)用。接口是為了解耦。文章來源地址http://www.zghlxwxcb.cn/news/detail-465699.html
到了這里,關(guān)于快進來,一起復(fù)習(xí)一下抽象類和接口的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!