• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學(xué)習(xí)啦>知識大全>知識百科>百科知識>

    java中接口和抽象類的區(qū)別是什么

    時間: 映芳735 分享

      對于面向?qū)ο缶幊虂碚f,抽象是它的一大特征之一。在Java中,可以通過兩種形式來體現(xiàn)OOP的抽象:接口和抽象類。這兩者有太多相似的地方,又有太多不同的地方。很多人在初學(xué)的時候會以為它們可以隨意互換使用,但是實際則不然。下面,就讓學(xué)習(xí)啦小編帶大家去了解一下接口和抽象類的區(qū)別吧!

      1.接口

      接口,英文稱作interface,在軟件工程中,接口泛指供別人調(diào)用的方法或者函數(shù)。從這里,我們可以體會到Java語言設(shè)計者的初衷,它是對行為的抽象。在Java中,定一個接口的形式如下:

      接口中可以含有 變量和方法。但是要注意,接口中的變量會被隱式地指定為public static final變量(并且只能是public static final變量,用private修飾會報編譯錯誤),而方法會被隱式地指定為public abstract方法且只能是public abstract方法(用其他關(guān)鍵字,比如private、protected、static、 final等修飾會報編譯錯誤),并且接口中所有的方法不能有具體的實現(xiàn),也就是說,接口中的方法必須都是抽象方法。

      從這里可以隱約看出接口和抽象類的區(qū)別,接口是一種極度抽象的類型,它比抽象類更加“抽象”,并且一般情況下不在接口中定義變量。

      2.抽象類

      抽象方法必須用abstract關(guān)鍵字進(jìn)行修飾。如果一個類含有抽象方法,則稱這個類為抽象類,抽象類必須在類前用abstract關(guān)鍵字修飾。因為抽象類中含有無具體實現(xiàn)的方法,所以不能用抽象類創(chuàng)建對象。

      3.抽象類和普通類的主要有三點區(qū)別

      1)抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現(xiàn)該方法),缺省情況下默認(rèn)為public。

      2)抽象類不能用來創(chuàng)建對象;

      3)如果一個類繼承于一個抽象類,則子類必須實現(xiàn)父類的抽象方法。如果子類沒有實現(xiàn)父類的抽象方法,則必須將子類也定義為為abstract類。

      4.接口和抽象類的區(qū)別

      A.語法層面上的區(qū)別

      1)抽象類可以提供成員方法的實現(xiàn)細(xì)節(jié),而接口中只能存在public abstract 方法;

      2)抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是public static final類型的;

      3)接口中不能含有靜態(tài)代碼塊以及靜態(tài)方法,而抽象類可以有靜態(tài)代碼塊和靜態(tài)方法;

      4)一個類只能繼承一個抽象類,而一個類卻可以實現(xiàn)多個接口。

      B.設(shè)計層面上的區(qū)別

      1)抽象類是對一種事物的抽象,即對類抽象,而接口是對行為的抽象。抽象類是對整個類整體進(jìn)行抽象,包括屬性、行為,但是接口卻是對類局部(行為)進(jìn)行抽象。舉個簡單的例子,飛機和鳥是不同類的事物,但是它們都有一個共性,就是都會飛。那么在設(shè)計的時候,可以將飛機設(shè)計為一個類Airplane,將鳥設(shè)計為一個類Bird,但是不能將 飛行 這個特性也設(shè)計為類,因此它只是一個行為特性,并不是對一類事物的抽象描述。此時可以將 飛行 設(shè)計為一個接口Fly,包含方法fly( ),然后Airplane和Bird分別根據(jù)自己的需要實現(xiàn)Fly這個接口。

      然后至于有不同種類的飛機,比如戰(zhàn)斗機、民用飛機等直接繼承Airplane即可,對于鳥也是類似的,不同種類的鳥直接繼承Bird類即可。從這里可以看出,繼承是一個 "是不是"的關(guān)系,而 接口 實現(xiàn)則是 "有沒有"的關(guān)系。如果一個類繼承了某個抽象類,則子類必定是抽象類的種類,而接口實現(xiàn)則是有沒有、具備不具備的關(guān)系,比如鳥是否能飛(或者是否具備飛行這個特點),能飛行則可以實現(xiàn)這個接口,不能飛行就不實現(xiàn)這個接口。

      2)設(shè)計層面不同,抽象類作為很多子類的父類,它是一種模板式設(shè)計。而接口是一種行為規(guī)范,它是一種輻射式設(shè)計。什么是模板式設(shè)計?最簡單例子,大家都用過ppt里面的模板,如果用模板A設(shè)計了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它們的公共部分需要改動,則只需要改動模板A就可以了,不需要重新對ppt B和ppt C進(jìn)行改動。

      而輻射式設(shè)計,比如某個電梯都裝了某種報警器,一旦要更新報警器,就必須全部更新。也就是說對于抽象類,如果需要添加新的方法,可以直接在抽象類中添加具體的實現(xiàn),子類可以不進(jìn)行變更;而對于接口則不行,如果接口進(jìn)行了變更,則所有實現(xiàn)這個接口的類都必須進(jìn)行相應(yīng)的改動。

    java中接口和抽象類的區(qū)別是什么

    對于面向?qū)ο缶幊虂碚f,抽象是它的一大特征之一。在Java中,可以通過兩種形式來體現(xiàn)OOP的抽象:接口和抽象類。這兩者有太多相似的地方,又有太多不同的地方。很多人在初學(xué)的時候會以為它們可以隨意互換使用,但是實際則不然。下面,就讓
    推薦度:
    點擊下載文檔文檔為doc格式
    537331 主站蜘蛛池模板: 国产精品视频第一区二区三区| 91麻豆精品国产片在线观看| 一级毛片私人影院| narutomanga玖辛奈本子| www.中文字幕| 456亚洲视频| 麻豆国产精品有码在线观看| 青苹果乐园在线高清 | 24小时免费看片| 久久久久99精品成人片试看| 一进一出60分钟免费视频| 992tv在线| 韩国r级2020年最新| 草莓污视频在线观看午夜社区| 美女扒开裤子让男人桶视频| 精品久久久久久中文| 欧美性最猛xxxx在线观看视频| 欧美丰满熟妇xxxxx| 护士们的放荡交换全文| 国内精品视频一区二区八戒| 国产强被迫伦姧在线观看无码| 国产三级免费观看| 亚洲女成人图区| 久久国产精品免费看| a视频免费观看| 91华人在线视频| 男人天堂网在线| 日韩精品视频免费观看| 废柴视频网最新fcww78| 国产香蕉国产精品偷在线| 国产午夜爽爽窝窝在线观看| 亚洲黄色网址在线观看| 久久精品亚洲日本波多野结衣| 一区二区三区视频| 成人福利免费视频| 永久看日本大片免费35分钟| 日韩综合无码一区二区| 天堂а√在线官网| 国产一区二区三区电影| 亚洲国产精品乱码在线观看97| 中文字幕一区二区三区乱码 |