999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺析Java抽象類與接口的區(qū)別

2018-01-08 22:34:28曾裕宗
電腦知識與技術(shù) 2017年36期
關(guān)鍵詞:實現(xiàn)

曾裕宗

摘要:抽象是Java語言的一種很重要的特性,可以通過兩種形式來體現(xiàn):abstract class(抽象類) 和interface(接口)。兩者之間有很大的相似性,但也存在不一樣的地方,該文結(jié)合筆者多年Java開發(fā)和教學(xué)經(jīng)驗,先分別闡述抽象類、接口,接著剖析兩者之間的區(qū)別,然后給出一個案例來說明,最后做出總結(jié)。

關(guān)鍵詞:抽象類;接口;繼承;實現(xiàn);區(qū)別

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2017)36-0202-02

抽象是任何一門面向?qū)ο缶幊陶Z言的一種相當(dāng)重要的特性,Java亦如此。Java OOP的抽象包含兩種:abstract class(抽象類) 和interface(接口)。從某種意義上講,正是因為有了這兩種抽象機制,Java才具備強大的 面向?qū)ο竽芰ΑK鼈儍烧咧g有很大的相似性,在編程的時候,有時可以相互替換實現(xiàn),但肯定也存在不一樣的地方,否則Java就沒必要搞兩個概念機制了。本文結(jié)合筆者多年Java開發(fā)和教學(xué)經(jīng)驗,來剖析、闡述兩者之間的區(qū)別,試圖給眾多Java初學(xué)者提供一些借鑒和參考。

首先,我們來講抽象類。簡單來說,包含抽象方法的類就叫抽象類。這里所說的抽象方法,是指只有方法頭部,即方法名稱,但沒有最重要的方法實現(xiàn)的語句體,其定義格式為:

從定義中,我們看出:抽象類所包含的方法,可以是抽象方法,也可以是普通的實現(xiàn)方法,另外,抽象類也可以擁有成員變量(屬性)。當(dāng)然,它跟普通類還是有以下的區(qū)別:

1) 抽象類,其修飾符必須為public或者protected,不能是private,因為創(chuàng)建抽象類,就是要被其他類繼承,用private修飾了,則不能被子類繼承,子類便無法實現(xiàn)該方法。

2) 抽象類不能用來創(chuàng)建對象,即抽象類不能被直接實例化,要通過其普通子類進(jìn)行實例化。

3) 如果一個普通子類繼承于一個抽象父類,則該類一定要重寫實現(xiàn)該父類的抽象方法。如果該子類仍然是一個抽象類,這也是允許的,就不必重寫實現(xiàn)該父類的抽象方法,但必須用abstract修飾。

接著,我們來講接口。接口,也可以認(rèn)為是一種特殊的抽象類,當(dāng)然,它本質(zhì)上不是類,它是一些方法特征的集合,但不可以有方法的實現(xiàn)。接口全部是由全局變量和公共的抽象方法組成,接口中的所有方法都是抽象方法,而且其修飾符必須是public類型,其定義格式為:

從定義中,我們看出:接口可以有全局成員變量,是一種超級抽象的類型,它比抽象類更加“抽象”。顯然,我們不能直接通過接口來創(chuàng)建對象,而是要創(chuàng)建普通類,先實現(xiàn)接口,再通過普通類來創(chuàng)建對象,其語法定義:

從定義中,我們看出:普通類可以實現(xiàn)多個接口,再就是,如果是普通類實現(xiàn)接口,那么必須重寫實現(xiàn)接口中的所有方法;如果實現(xiàn)接口的還是抽象類,則可以不必重寫實現(xiàn)接口中的所有方法,還可以有自己的方法。

講完了抽象類和接口,我們重點來論述兩者之間的區(qū)別,總體來說,有兩大方面的區(qū)別:

1 定義的語法不同

從定義中,我們看出:兩者的關(guān)鍵詞不同,抽象類是abstract class,而接口是Interface;抽象類可以有成員變量數(shù)據(jù),也可以具有非抽象方法,但是接口則不同,它方法外只能定義的是常量(一般情況下不定義),而且它所有的方法都必須是抽象的。可以這么理解,接口是特殊的抽象類。子類只能繼承一個父類或抽象類,但是它卻可以實現(xiàn)多個接口,這叫子類的單繼承、多實現(xiàn)。

2 設(shè)計理念層次不一樣

1) 抽象級別不一樣,抽象類是對整體類的抽象,包含屬性和方法;而接口是對其中方法的抽象,即一般只是對其方法進(jìn)行抽象。

2) 實現(xiàn)類的范圍不同,抽象類,其實是從子類中提取共性部分,然后抽象出來,反之,子類繼承該父類就可以了,也就是說里面的抽象方法一般來自同一個類別,而接口卻可以跨越不同的類,實現(xiàn)它的子類可以不存在任何關(guān)系和共同之處,即接口中定義的抽象方法,在被不同的普通類實現(xiàn)時,即重寫其抽象方法時,可以具有完全不同的行為,即語句體可以完全不同。舉個例子,老虎、牛這些動物,來自同一類別,可以抽象成一個動物類,都有睡的行為;鳥、飛機都能飛,可以有Fly接口,但是,顯然它們是沒有共同父類的?所以,只能用接口寫。也就是說,抽象類反映的是一種繼承關(guān)系,父類和子類之間必須存在"is-a" 關(guān)系,而接口則不同,其同樣的方法,在不同的地方,可以實現(xiàn)完全不一樣的行為,體現(xiàn)的是"like-a"關(guān)系。

3) 設(shè)計方式不同,抽象類是要先有子類,然后才抽象出父類,是一種從下往上的構(gòu)建法則;而接口不需要先有子類,它只需要定義一些抽象方法就行。比如前面提到的例子,假如我們只有一個老虎類,你肯定不能馬上抽象成一個動物類,最起碼還要有牛類,然后才可以找它們的共同點,形成一個動物抽象類,它是倒過來實現(xiàn)的。但是接口不一樣,比如前面提到的飛,我們只需要事前定義好飛的行為接口,其后面的實現(xiàn)不管它,可以有完全不同的行為,也就是說,接口是從上向下設(shè)計出來的。

問題來了,假如再增加一個fly( )的功能,該怎么實現(xiàn)?

可以這么解決,將這個方法,連同之前的兩個方法,一起放在抽象類里,但這樣做有個問題,繼承于這個抽象類的子類都帶上了fly( )行為,但現(xiàn)實中,有些動物是不會飛的;也可以將這三個方法都放在接口里,但這樣一來,有些只有飛功能的類就又不得不去實現(xiàn)這個接口中的eat( )和sleep( )方法,比如飛機,它沒有eat( )和sleep( )方法。所以,這個解決辦法不妥,最合理的解決方案是,應(yīng)該將飛創(chuàng)建為一個接口,具有fly()行為,而把Animal創(chuàng)建為一個抽象類,它具有eat和sleep兩種方法。最后,創(chuàng)建一個類繼承Animal抽象類和實現(xiàn)Fly接口,這樣問題就科學(xué)的解決了,改進(jìn)后的代碼如下:

綜上所述,Java抽象類與接口的區(qū)別,主要有以下5個方面:

1) 抽象類是特殊的類,它只能被繼承一次,而接口可以被多次實現(xiàn),這就是單繼承、多實現(xiàn)。

2) 在抽象類中,其方法可以是抽象方法,也可以是實現(xiàn)方法,可以有全局成員變量;接口只能有抽象方法,只能有常量,且一般情況下不定義它。

3) 抽象類與接口,它們的設(shè)計理念不同。抽象類反映的是"is-a"關(guān)系,接口反映的是"like-a"關(guān)系。

4) 接口中定義的變量是public static final 型,且一定要賦初始值,它相當(dāng)于一個常量,故實現(xiàn)類中不能再次定義,也就不能改變它的值。

5) 抽象類中定義的變量是普通的,它就是一個真正的變量,它的值可以在子類中再次定義,也可以重新賦值。

參考文獻(xiàn):

[1] 徐紅.java程序設(shè)計.高等教育出版社,2013.

[2] 廖大強.面向多目標(biāo)的云計算資源調(diào)度算法,計算機系統(tǒng)應(yīng)用,2016,25(2):180-189.

猜你喜歡
實現(xiàn)
小學(xué)音樂教學(xué)過程中對情感教育的應(yīng)用分析
青年時代(2016年29期)2016-12-09 22:50:42
唐山市氣象服務(wù)系統(tǒng)的設(shè)計與實現(xiàn)
基于天地圖API的航空無線電干擾區(qū)域定位平臺設(shè)計與實現(xiàn)
智能制造中的關(guān)鍵技術(shù)及實現(xiàn)途徑探析
初探勘察測繪科技檔案管理系統(tǒng)設(shè)計與實現(xiàn)
新課改下小學(xué)數(shù)學(xué)如何實現(xiàn)教學(xué)生活化
信息系統(tǒng)安全評價系統(tǒng)設(shè)計及實現(xiàn)
高校聲像檔案數(shù)字化管理的實現(xiàn)路徑
辦公室人員尚需制定個人發(fā)展規(guī)劃
蘇州信息學(xué)院教務(wù)管理系統(tǒng)的設(shè)計與實現(xiàn)
主站蜘蛛池模板: 国产精品天干天干在线观看| 久久精品亚洲热综合一区二区| 国产不卡网| 国产成人免费高清AⅤ| 免费一极毛片| 亚洲久悠悠色悠在线播放| 波多野结衣一二三| 亚洲欧洲日产国产无码AV| 免费人成网站在线高清| 秋霞午夜国产精品成人片| 国产亚洲欧美另类一区二区| 亚洲第一页在线观看| 中文字幕一区二区人妻电影| 国产精品白浆无码流出在线看| 成人午夜久久| 99ri精品视频在线观看播放| 毛片网站在线看| 亚洲自拍另类| 亚洲日本精品一区二区| 欧美一区中文字幕| 熟妇人妻无乱码中文字幕真矢织江 | 日韩欧美国产区| 久久77777| 在线精品亚洲一区二区古装| 欧美成人第一页| 国产伦精品一区二区三区视频优播| 久久无码免费束人妻| 日本午夜影院| 精品久久国产综合精麻豆| 蜜桃臀无码内射一区二区三区| 欧美成人精品在线| 黄色a一级视频| 亚洲色图在线观看| 免费 国产 无码久久久| 欧美日韩国产精品综合| 中文字幕乱码中文乱码51精品| 无码视频国产精品一区二区| 亚洲第一综合天堂另类专| 国产免费久久精品99re不卡| 中日无码在线观看| 91欧洲国产日韩在线人成| 久久久久青草线综合超碰| 香蕉视频在线观看www| 婷婷色一二三区波多野衣| 又污又黄又无遮挡网站| 91精品啪在线观看国产| 18禁影院亚洲专区| 美女国产在线| 啦啦啦网站在线观看a毛片| 欧美人在线一区二区三区| 最新亚洲人成网站在线观看| 亚洲天堂成人在线观看| 国产精品3p视频| AV不卡无码免费一区二区三区| 在线国产91| 国产一区二区精品高清在线观看| 一级毛片不卡片免费观看| hezyo加勒比一区二区三区| 波多野结衣一级毛片| 成年女人a毛片免费视频| 久久国产精品国产自线拍| 免费国产黄线在线观看| 亚洲人成影视在线观看| 操国产美女| 久久五月视频| 中文字幕1区2区| 2018日日摸夜夜添狠狠躁| 日韩高清一区 | 亚洲男人在线天堂| 成年看免费观看视频拍拍| 99伊人精品| 亚洲中文精品久久久久久不卡| 欧美另类一区| 国产精品久线在线观看| 精品自拍视频在线观看| 亚洲天堂网在线视频| 日本五区在线不卡精品| 高清色本在线www| 国产在线麻豆波多野结衣| 青青青视频蜜桃一区二区| 亚洲欧美成aⅴ人在线观看| 一级做a爰片久久毛片毛片|