• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    淺析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(接口)。從某種意義上講,正是因為有了這兩種抽象機(jī)制,Java才具備強(qiáng)大的 面向?qū)ο竽芰?。它們兩者之間有很大的相似性,在編程的時候,有時可以相互替換實現(xiàn),但肯定也存在不一樣的地方,否則Java就沒必要搞兩個概念機(jī)制了。本文結(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)時,即重寫其抽象方法時,可以具有完全不同的行為,即語句體可以完全不同。舉個例子,老虎、牛這些動物,來自同一類別,可以抽象成一個動物類,都有睡的行為;鳥、飛機(jī)都能飛,可以有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( )方法,比如飛機(jī),它沒有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] 廖大強(qiáng).面向多目標(biāo)的云計算資源調(diào)度算法,計算機(jī)系統(tǒng)應(yīng)用,2016,25(2):180-189.

    猜你喜歡
    接口繼承實現(xiàn)
    某電站工程設(shè)計管理與施工、質(zhì)量控制接口關(guān)系研究
    脫硝數(shù)據(jù)傳輸系統(tǒng)遠(yuǎn)程無線監(jiān)控技術(shù)的研發(fā)與應(yīng)用
    中文信息(2016年10期)2016-12-12 12:56:55
    西門子SPPA—T3000在委內(nèi)瑞拉燃機(jī)電廠中的應(yīng)用與接口
    中國市場(2016年32期)2016-12-06 11:16:14
    辦公室人員尚需制定個人發(fā)展規(guī)劃
    蘇州信息學(xué)院教務(wù)管理系統(tǒng)的設(shè)計與實現(xiàn)
    淺談杜審言、杜甫的祖孫關(guān)系:推崇、繼承、發(fā)展
    人間(2016年28期)2016-11-10 21:48:10
    淺論紫砂藝術(shù)的繼承與創(chuàng)新
    論電影《暮光之城》的哥特文化
    如何實現(xiàn)人企合一
    淺析鐵路通信傳輸?shù)臉?gòu)成及實現(xiàn)方法
    铁岭市| 长宁县| 濉溪县| 贵港市| 远安县| 万安县| 邹平县| 康乐县| 河曲县| 阳新县| 洛扎县| 广州市| 黑山县| 宝清县| 宿松县| 花莲县| 道孚县| 稷山县| 沙雅县| 鄂伦春自治旗| 通江县| 北宁市| 武平县| 永新县| 阜康市| 万源市| 伊川县| 唐山市| 二连浩特市| 松阳县| 德昌县| 道孚县| 曲松县| 奉化市| 昌平区| 绥德县| 志丹县| 吉林市| 宜昌市| 土默特右旗| 马尔康县|