1、抽象類(lèi)與接口的區(qū)別如下:語(yǔ)法層面區(qū)別: 1)抽象類(lèi)中提供成員方法的實(shí)現(xiàn)細(xì)節(jié),接口中只能是public abstract修飾,即只能是抽象方法。
2、 2)抽象類(lèi)中成員變量可實(shí)現(xiàn)多種權(quán)限public private protected final 等,接口中只能用public static final修飾。
【資料圖】
3、 3)抽象類(lèi)中可以有靜態(tài)方法和靜態(tài)代碼塊,接口中不能有靜態(tài)方法和靜態(tài)代碼塊。
4、 4)單繼承多實(shí)現(xiàn)。
5、2、設(shè)計(jì)層面區(qū)別: 1)抽象類(lèi)是對(duì)事物的抽象,即對(duì)類(lèi)抽象;接口是對(duì)行為抽象,即局部抽象。
6、 抽象類(lèi)對(duì)整體形為進(jìn)行抽象,包括形為和屬性。
7、接口只對(duì)行為進(jìn)行抽象。
8、 例子:舉個(gè)簡(jiǎn)單的例子,飛機(jī)和鳥(niǎo)是不同類(lèi)的事物,但是它們都有一個(gè)共性,就是都會(huì)飛。
9、那么在設(shè)計(jì)的時(shí)候,可以將飛機(jī)設(shè)計(jì)為一個(gè)類(lèi)Airplane,將鳥(niǎo)設(shè)計(jì)為一個(gè)類(lèi)Bird,但是不能將飛行 這個(gè)特性也設(shè)計(jì)為類(lèi),因此它只是一個(gè)行為特性,并不是對(duì)一類(lèi)事物的抽象描述。
10、此時(shí)可以將 飛行 設(shè)計(jì)為一個(gè)接口Fly,包含方法fly(),然后Airplane和Bird分別根據(jù)自己的需要實(shí)現(xiàn)Fly這個(gè)接口。
11、然后至于有不同種類(lèi)的飛機(jī),比如戰(zhàn)斗機(jī)、民用飛機(jī)等直接繼承Airplane即可,對(duì)于鳥(niǎo)也是類(lèi)似的,不同種類(lèi)的鳥(niǎo)直接繼承Bird類(lèi)即可。
12、從這里可以看出,繼承是一個(gè)"是不是"的關(guān)系,而 接口 實(shí)現(xiàn)則是"有沒(méi)有"的關(guān)系。
13、如果一個(gè)類(lèi)繼承了某個(gè)抽象類(lèi),則子類(lèi)必定是抽象類(lèi)的種類(lèi),而接口實(shí)現(xiàn)則是有沒(méi)有、具備不具備的關(guān)系,比如鳥(niǎo)是否能飛(或者是否具備飛行這個(gè)特點(diǎn)),能飛行則可以實(shí)現(xiàn)這個(gè)接口,不能飛行就不實(shí)現(xiàn)這個(gè)接口。
14、 2)抽象類(lèi)是多個(gè)子類(lèi)的像類(lèi),是一種模板式設(shè)計(jì);接口是一咱形為規(guī)范,是一種輻射式設(shè)計(jì)。
15、 例子:最簡(jiǎn)單例子,大家都用過(guò)ppt里面的模板,如果用模板A設(shè)計(jì)了ppt B和ppt C,ppt B和pptC公共的部分就是模板A了,如果它們的公共部分需要改動(dòng),則只需要改動(dòng)模板A就可以了,不需要重新對(duì)ppt B和pptC進(jìn)行改動(dòng)。
16、而輻射式設(shè)計(jì),比如某個(gè)電梯都裝了某種報(bào)警器,一旦要更新報(bào)警器,就必須全部更新。
17、也就是說(shuō)對(duì)于抽象類(lèi),如果需要添加新的方法,可以直接在抽象類(lèi)中添加具體的實(shí)現(xiàn),子類(lèi)可以不進(jìn)行變更;而對(duì)于接口則不行,如果接口進(jìn)行了變更,則所有實(shí)現(xiàn)這個(gè)接口的類(lèi)都必須進(jìn)行相應(yīng)的改動(dòng)。
本文到此分享完畢,希望對(duì)大家有所幫助。
責(zé)任編輯: