zxbyhcsdn

           

          關(guān)于抽象類和接口的理解:

          關(guān)于抽象類和接口的理解:
           
          抽象類建議這樣來理解好一點(diǎn):抽象者,不確定也
          就是原本是一個(gè)普通的類,但是由于有了一個(gè)抽象方法,所以這個(gè)類就必須成為一個(gè)抽象類.
          為什么啦!
          因?yàn)槎x成抽象類,就不允許直接實(shí)例化了. 想想也是顯然的,因?yàn)橛幸粋€(gè)方法是抽象方法,都沒有實(shí)現(xiàn),
          實(shí)例化成對(duì)象了,然后對(duì)象調(diào)用這個(gè)方法不久瓜了么?
          這就好比車子還沒有安上方向盤,如果要開的話,就沒辦法控制方向了.
          抽象類使用的場合:
          類的部分方法是確定的,而另外部分方法是不確定的,只有通過繼承的子類去確定這部分方法,
          但是子類可以使用抽象類的確定的方法(重用).

          這兒需要注意一點(diǎn):就是不要去Override 父類的非抽象方法,那寫方法是給你重用的,不是給你置換的.
          原則:繼承應(yīng)當(dāng)用來擴(kuò)展超類的功能,而不是置換或者撤銷超類的功能
          比如說,你有一個(gè)貓,然后你把狗繼承自貓,但是貓可以爬樹,狗不能.就只有把那個(gè)爬樹的功能撤銷了.想想這是多么荒唐的事情啊!!

          那么何為接口啦:
          就是說有一個(gè)類,所有的方法都是不確定的.
          比如說 平面形狀,總歸有獲取設(shè)置邊長,面積這些方法吧,但是怎么去實(shí)現(xiàn)是不確定的.
          好像 形狀這玩意兒 的確找不到能確定的方法.那么就可以定義成一個(gè)接口.
          接口允許有 public static final 的屬性, 但是不推薦這樣用,這是一種錯(cuò)誤的用法.
          可以認(rèn)為接口就是一個(gè)特殊的 抽象類(所有的方法都是不確定的)
          然后接口有一個(gè)好處,就是可多繼承.
          舉一個(gè)例子,說明抽象類和接口一起用的地方
          比如說,門這個(gè)類有Opern和Close兩個(gè)方法,但是有一種特殊的門需要一個(gè)報(bào)警的功能,
          但是報(bào)警不是門的特征,是報(bào)警器的特征,故可以把報(bào)警設(shè)置為一個(gè)接口
          那么報(bào)警的門就從門這個(gè)抽象類和報(bào)警接口繼承

          posted on 2008-07-23 19:03 zxbyh 閱讀(1588) 評(píng)論(6)  編輯  收藏 所屬分類: OOAD

          評(píng)論

          # re: 關(guān)于抽象類和接口的理解: 2008-07-23 22:19 藍(lán)雪沙

          恩,寫的挺不錯(cuò),特別是 接口 最后面舉的 門 例子 我感覺非常到位。

          希望樓主繼續(xù)總結(jié),Java中像這樣的有必要徹底清楚的很多。   回復(fù)  更多評(píng)論   

          # re: 關(guān)于抽象類和接口的理解: 2008-07-24 08:41 wxm

          我是這樣理解的,從目的上來說,抽象類主要是為了代碼或算法的重用,而接口是一種約定,從功能上來說,抽象類有實(shí)現(xiàn)部分,但是不能多繼承,接口能多繼承,但是不能有實(shí)現(xiàn),日常使用中,應(yīng)該從使用的目的上來決定是否采用抽象類或接口,而不是語法功能上  回復(fù)  更多評(píng)論   

          # re: 關(guān)于抽象類和接口的理解: 2008-07-24 13:01 zhuxing

          同意樓上(wxm )說的,建議一般不要從語法的層面進(jìn)行區(qū)分。

          很關(guān)鍵的一個(gè)區(qū)別:接口更加靈活,同時(shí)能夠更好地支持動(dòng)態(tài)擴(kuò)展。例如,類之間的繼承結(jié)構(gòu)體現(xiàn)出了一個(gè)中縱向的結(jié)構(gòu),而接口則可以橫向的切入。
          再者,接口一般用來封裝一個(gè)抽象的主題,多表現(xiàn)在行為的變化封裝和擴(kuò)展。



          還有,我們?cè)谠O(shè)計(jì)一個(gè)類型的時(shí)候,考慮兩件事情:
          1、定義其責(zé)任,即對(duì)外提供的服務(wù),并定義通信的規(guī)則。
          2、如何創(chuàng)建和實(shí)現(xiàn)化改類型。

          1解決了如何使用類型的問題,2解決了如何創(chuàng)建的問題。接口相比抽象類能更加自然的將兩者進(jìn)行解耦,而且能夠明顯加大2的自由度,因?yàn)楹芏鄷r(shí)候我們是用工廠的方式對(duì)外提供實(shí)例。

          其實(shí),很多的爭論點(diǎn)在如何放置公共功能的問題。其實(shí)很多牛人寫程序,很多時(shí)候很自然的運(yùn)用Interface/Default Impl的方式,即:你定義了一個(gè)接口,順便提供一個(gè)相應(yīng)的抽象類,提供一些默認(rèn)的實(shí)現(xiàn)。

            回復(fù)  更多評(píng)論   

          # re: 關(guān)于抽象類和接口的理解: [未登錄] 2008-07-24 14:03 zxbyh

          看了以上兩位的評(píng)論,覺得提出的意見很好,
          但是我覺得既然也不是什么非腦筋的事情,何不在語法和應(yīng)有的兩個(gè)層面上都理解清楚啦.比較基礎(chǔ)的東西,理解透徹點(diǎn)是好事情.

          1.
          抽象類使用的場合:
          類的部分方法是確定的,而另外部分方法是不確定的,只有通過繼承的子類去確定這部分方法,
          但是子類可以使用抽象類的確定的方法(重用).
          ------------------------------------------------------
          這句話的意思就是說抽象類主要是為了代碼或算法的重用.


          2.
          那么何為接口啦:
          就是說有一個(gè)類,所有的方法都是不確定的.
          比如說 平面形狀,總歸有獲取設(shè)置邊長,面積這些方法吧,但是怎么去實(shí)現(xiàn)是不確定的.
          ----------------------------------------------------------
          上面這一段話,需要改一下,就是說有一個(gè)類,所有的方法都是不確定的.但是必須要有這些方法.
          換言之:接口是一種約定,是一種規(guī)范,你必須滿足他,但是不關(guān)心你怎么實(shí)現(xiàn).
            回復(fù)  更多評(píng)論   

          # re: 關(guān)于抽象類和接口的理解: [未登錄] 2008-07-24 19:47 kevin

          @zxbyh
          你這么一解釋,那問題就大了去了 。。。。  回復(fù)  更多評(píng)論   

          # re: 關(guān)于抽象類和接口的理解: 2008-07-25 00:43 stanleyxu

          abstract class is related to oop. it can be considered as a strict relationship, just like couple.
          interface is an easy-to-bind. it can be considered as a loose relationship, just like one night stand  回復(fù)  更多評(píng)論   

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 灵川县| 石门县| 莱阳市| 昌江| 阿尔山市| 克东县| 湘潭市| 祥云县| 秦皇岛市| 祁阳县| 汕尾市| 从化市| 渑池县| 阳新县| 拜泉县| 永年县| 板桥市| 大渡口区| 邵阳市| 普陀区| 乌拉特后旗| 临澧县| 东台市| 富川| 师宗县| 辽宁省| 长宁县| 枣阳市| 丹凤县| 通河县| 沁阳市| 荔波县| 枣强县| 全椒县| 淅川县| 深圳市| 长葛市| 治县。| 铜川市| 白玉县| 台江县|