b47617

          攀登!進(jìn)步!
          隨筆 - 20, 文章 - 1, 評(píng)論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          Interface 和 Abstract 異同....

          1.相同及聯(lián)系
          A.兩者都是抽象類,都不能實(shí)例化.
          B.Interface實(shí)現(xiàn)類及Abstract子類都必須要實(shí)現(xiàn)已經(jīng)聲明的抽象方法.
          2.不同
          A.Interface實(shí)現(xiàn)需要用implements,而Abstract被子類繼承需要extends.
          B.一類可以實(shí)現(xiàn)多個(gè)接口,但一個(gè)類只能繼承一個(gè)Abstract class.
          C. Interface強(qiáng)調(diào)特定功能的實(shí)現(xiàn),而Abstract class強(qiáng)調(diào)所屬關(guān)系。
          D.盡管Interface實(shí)現(xiàn)類及Abstract的子類都必須實(shí)現(xiàn)抽象方法.但實(shí)現(xiàn)形式不同,Interface每一個(gè)方法都是抽象方法,都只是聲明(declaration, 沒(méi)有方法體),實(shí)現(xiàn)類必須實(shí)現(xiàn).而Abstract class的子類可以有選擇的實(shí)現(xiàn),這個(gè)選擇可以有兩點(diǎn)含義:
             一是Abstract class 中的并非所有的方法都是抽象,只有那此冠有abstract才是抽象方法,子類必須實(shí)現(xiàn).而沒(méi)有abstract的方法,在abstract class中必須定義方法體.
             二是Abstract class的子類在繼承時(shí),對(duì)非抽象方法即可繼承,也可以override.而對(duì)抽象方法,可以選擇實(shí)現(xiàn),也可以在次聲明其方法是抽象方法,其實(shí)現(xiàn)可以由子類實(shí)現(xiàn).但此類也必須是抽象類,也不能對(duì)其實(shí)例化.
          E.abstract class 是interface和class中介
            interface完全是抽象的,只能聲明方法,類型是public,不可以是private及proteced.不能定義方法體,也不能聲明實(shí)例變量.然而,interface卻可以聲明常量變量,并且在JDK中不難找出這種例子。但將常量變量放在interface中違背了其作為接口的作用而存在的宗旨,也混淆了interface與類的不同價(jià)值。如果的確需要,可以將其放在相應(yīng)的abstract class或Class中。
            abstract class在interface及Class中起到了承上啟下的作用。一方面,abstract class是抽象的,可以聲明抽象方法,以規(guī)范子類必須實(shí)現(xiàn)的功能;另一方面,它又可以定義缺省的方法體,供子類直接使用或覆蓋。另外,它還可以定義自己的實(shí)例變量,以供子類通過(guò)繼承來(lái)使用。
          三. interface的應(yīng)用場(chǎng)合
            A. 類與類之前需要特定的接口進(jìn)行協(xié)調(diào),而不在乎其如何實(shí)現(xiàn)。
            B. 作為能夠?qū)崿F(xiàn)特定功能的標(biāo)識(shí)存在,也可以是什么接口方法都沒(méi)有的純粹標(biāo)識(shí)。
            C. 需要將一組類視為單一的類,而調(diào)用者只通過(guò)接口來(lái)與這組類發(fā)生聯(lián)系。
            D. 需要實(shí)現(xiàn)特定的多項(xiàng)功能,而這些功能之間可能完全沒(méi)有任何聯(lián)系。

          四. abstract class的應(yīng)用場(chǎng)合
            一句話,在既需要統(tǒng)一的接口,又需要實(shí)例變量或缺省的方法的情況下,就可以使用它。最常見(jiàn)的有:
            A. 定義了一組接口,但又不想強(qiáng)迫每個(gè)實(shí)現(xiàn)類都必須實(shí)現(xiàn)所有的接口。可以用abstract class定義一組方法體,甚至可以是空方法體,然后由子類選擇自己所感興趣的方法來(lái)覆蓋。
            B. 某些場(chǎng)合下,只靠純粹的接口不能滿足類與類之間的協(xié)調(diào),還必需類中表示狀態(tài)的變量來(lái)區(qū)別不同的關(guān)系。abstract的中介作用可以很好地滿足這一點(diǎn)。
            C. 規(guī)范了一組相互協(xié)調(diào)的方法,其中一些方法是共同的,與狀態(tài)無(wú)關(guān)的,可以共享的,無(wú)需子類分別實(shí)現(xiàn);而另一些方法卻需要各個(gè)子類根據(jù)自己特定的狀態(tài)來(lái)實(shí)現(xiàn)特定的功能。

          posted on 2006-03-04 12:24 原語(yǔ) 閱讀(339) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 丹阳市| 海晏县| 潼南县| 扎兰屯市| 临海市| 永靖县| 瑞丽市| 金平| 德惠市| 夏邑县| 遵义县| 维西| 九龙城区| 宁安市| 甘南县| 扎兰屯市| 鄂伦春自治旗| 望城县| 曲阜市| 鄂州市| 温州市| 景宁| 普宁市| 尉氏县| 安泽县| 海晏县| 绍兴县| 聂拉木县| 莱西市| 青海省| 奉新县| 富宁县| 盖州市| 义马市| 南投市| 图片| 苏尼特右旗| 永仁县| 金昌市| 女性| 沙田区|