<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評(píng)論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

    接口、類、抽象類、對(duì)象的另類解釋

    本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!

        大家也許都知道做工藝器或是工廠里做生產(chǎn)某些產(chǎn)品的模具模具。如做一個(gè)金屬的五角星,只要將鋼水罐到五角星的模具模具里就可以很容易地制做五角星。

        我們也可以將類比喻成做五角星的模具。  而生產(chǎn)出的一個(gè)個(gè)五角星就是一個(gè)個(gè)對(duì)象。 為了建立不同的對(duì)象(有的是金屬的、有的塑料的,等等),可通過(guò)向模具里灌入不同的液態(tài)材料就可以制做。這也相當(dāng)于向類的構(gòu)造方法中傳入不同的參數(shù)(相當(dāng)于不同的液態(tài)材料)。

        還有就是接口,如果說(shuō)類是對(duì)象的抽象,那么接口就是類的抽象。
    我們也可以將接口看成是制做這個(gè)五角星模具的規(guī)格列表(相當(dāng)于接口中的抽象方法)。也就是說(shuō),只有這個(gè)模具(類)符合(實(shí)現(xiàn))相應(yīng)的規(guī)格(接口),才會(huì)成為制做五角星的模具模具。

    哈哈,當(dāng)然,這個(gè)使用模具生成五角星及其他產(chǎn)品的工廠可以看成是對(duì)象工廠。

    class ObjectFactory
    {
        
    public static 五解星 create五角星() {}
       
        
    public static 圓 create圓() {}

          
    public static 橢圓 create橢圓() {}
        
    }


        也就是說(shuō),類和接口都不是實(shí)際的產(chǎn)品,都不能拿來(lái)用,類相當(dāng)于模具(沒(méi)人會(huì)拿模具模具在商店里賣吧,估計(jì)只有對(duì)象工廠會(huì)買),而接口只相當(dāng)于制做模具的規(guī) 格列表,如尺寸、角度等。而這些規(guī)格列表的內(nèi)容需要在具體類中實(shí)現(xiàn)才可能成為具體的模具,如長(zhǎng)度和寬度,如果在類中實(shí)現(xiàn)為長(zhǎng)度等于寬度,那么這個(gè)類就成為 一個(gè)成方形的模具,如果長(zhǎng)度不等于寬度,就是一個(gè)長(zhǎng)方形的模具。然后再實(shí)例化這個(gè)模具(類),就生成出一個(gè)個(gè)正方形或長(zhǎng)方形對(duì)象。

        在面向?qū)ο罄碚撝羞€有一個(gè)抽象類,這個(gè)抽象類其實(shí)就相當(dāng)于一個(gè)半成品的模具。如只實(shí)現(xiàn)在長(zhǎng)度和寬度(相當(dāng)于在抽象類中已實(shí)現(xiàn)的方法),并沒(méi)有實(shí)現(xiàn)深度(這 個(gè)深度相當(dāng)于抽象類中的抽象方法,這個(gè)抽象方法需要在抽象類的子類中實(shí)現(xiàn))。所以這個(gè)模具就是半成品了。因此,是無(wú)法直接拿半成品的模具(抽象類)去生產(chǎn) (實(shí)例化)產(chǎn)品(對(duì)象)的。





    Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺(tái)灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2008-04-27 09:50 銀河使者 閱讀(2743) 評(píng)論(9)  編輯  收藏 所屬分類: java 原創(chuàng)

    評(píng)論

    # re: 接口、類、抽象類、對(duì)象的另類解釋  回復(fù)  更多評(píng)論   

    不嚴(yán)謹(jǐn)。

    一個(gè)類可以有多個(gè)接口,如果接口是規(guī)格,那么一個(gè)類豈不是有多個(gè)規(guī)格?規(guī)格比喻成類更合適。
    類是個(gè)定義,是生產(chǎn)之前的東西,只有實(shí)例化之后才是實(shí)實(shí)在在的東西。真的可以可以比喻成模具的是工廠類的生產(chǎn)方式。
    2008-04-27 10:52 | stanleyxu

    # re: 接口、類、抽象類、對(duì)象的另類解釋  回復(fù)  更多評(píng)論   

    一個(gè)類當(dāng)然可以有多個(gè)規(guī)格。就象一個(gè)模具,如五角星,當(dāng)然可以有多個(gè)規(guī)格(如角度不同,五角星也有很多變了型的,哈哈),

    接口:規(guī)格
    類:模具
    對(duì)象:用模具制作的產(chǎn)品

    一個(gè)類(模具)可以實(shí)現(xiàn)多個(gè)接口(規(guī)格)。一個(gè)模具可以建立多個(gè)對(duì)象(產(chǎn)品)。

    2008-04-27 11:04 | 銀河使者

    # re: 接口、類、抽象類、對(duì)象的另類解釋  回復(fù)  更多評(píng)論   

    接口不是oop的一部分,是后來(lái)才有的。它和抽象類有點(diǎn)類似,所以經(jīng)常放在一起比較。我對(duì)此文的不少解釋不敢茍同。
    1. 對(duì)象是原子類,你想說(shuō)的對(duì)象,我認(rèn)作為實(shí)例。如果你去看java的文檔,里面寫的很清楚:Class Object is the root of the class hierarchy.
    2. 接口如我所說(shuō),不是oop的一部分,他是不需要繼承機(jī)制的。也就是說(shuō),任何2個(gè)不相關(guān)的類,可以擁有同樣的一個(gè)接口。這個(gè)你可以解釋成:任何2個(gè)不同的模具都擁有一樣的規(guī)格?

    如果按照我的說(shuō)法:
    接口是特殊設(shè)計(jì)要求,抽象類是設(shè)計(jì)方案模板,類是具體設(shè)計(jì)方案,實(shí)例是成品。
    那么一個(gè)產(chǎn)品的設(shè)計(jì)方案可以是由具體設(shè)計(jì)方案而來(lái)。(一個(gè)類可以是從抽象類繼承)
    一個(gè)設(shè)計(jì)方案可能需要符合多個(gè)特殊設(shè)計(jì)要求。(一個(gè)類可以擁有0..n個(gè)接口)
    只有通過(guò)具體設(shè)計(jì)方案才可以生產(chǎn)成品,而不能根據(jù)方案模板或者一個(gè)特殊設(shè)計(jì)要求進(jìn)行制造。(一個(gè)實(shí)例是通過(guò)類創(chuàng)建,而不是直接從一個(gè)抽象類或者接口創(chuàng)建)
    2008-04-27 11:51 | stanleyxu

    # re: 接口、類、抽象類、對(duì)象的另類解釋  回復(fù)  更多評(píng)論   

    更正上一個(gè)評(píng)論:
    一個(gè)產(chǎn)品的設(shè)計(jì)方案可能是根據(jù)某個(gè)設(shè)計(jì)方案模板修改而來(lái)。(一個(gè)類可以是從抽象類繼承)
    一個(gè)(具體)設(shè)計(jì)方案可能需要符合多個(gè)特殊設(shè)計(jì)要求。(一個(gè)(抽象)類可以擁有0..n個(gè)接口)
    只有通過(guò)具體設(shè)計(jì)方案才可以生產(chǎn)成品,而不能根據(jù)一個(gè)方案模板或者一個(gè)特殊設(shè)計(jì)要求直接進(jìn)行制造。(一個(gè)實(shí)例是通過(guò)類創(chuàng)建,而不是直接從一個(gè)抽象類或者接口創(chuàng)建)
    2008-04-27 12:00 | stanleyxu

    # re: 接口、類、抽象類、對(duì)象的另類解釋  回復(fù)  更多評(píng)論   

    總之,先有的類,然后再有的接口,接口主要是為了制定規(guī)范而存在的。如在團(tuán)隊(duì)開發(fā)過(guò)程中,設(shè)計(jì)師可以會(huì)設(shè)計(jì)一系列的接口,然后所有的開發(fā)人員在開發(fā)component時(shí),都會(huì)遵循這些接口。這樣就可以盡量避免設(shè)計(jì)和實(shí)現(xiàn)沖突。
    就象servlet、jsp、ejb的規(guī)范都是由接口(也有抽象類)組成的。

    至于抽象類,我認(rèn)為是sun的設(shè)計(jì)師看到接口和類都有缺點(diǎn)。接口雖然可以強(qiáng)迫類必須實(shí)現(xiàn)接口的方法,但是如果多個(gè)類同時(shí)實(shí)現(xiàn)一個(gè)接口,而這個(gè)接口中的一些方法在這些類中的實(shí)現(xiàn)是完全一樣的。那么就會(huì)出現(xiàn)代碼冗余(雖然可以使用組合的方式解決,但仍會(huì)出現(xiàn)一定的代碼冗余)。因此,java就會(huì)為我們?cè)黾恿顺橄箢悾瓤梢詮?qiáng)迫抽象類的子類實(shí)現(xiàn)某些方法,又可以達(dá)到代碼重用。

    因此,也可以這么說(shuō)。所有的方法都是抽象方法的抽象類就是接口,所有的方法都是普通方法的抽象類就相當(dāng)于普通類(雖然不能創(chuàng)建抽象類的實(shí)例)

    就象一個(gè)劃桿,左邊代表抽象,右邊代表具體。如果劃到最左邊,就是接口,劃到最右邊,就相當(dāng)于普通類(除了不能創(chuàng)建實(shí)例,其他的和普通類完全一樣)。

    總之,有了抽象類,就可以同時(shí)擁有接口和普通類的優(yōu)點(diǎn),而屏蔽了接口和普通類的缺點(diǎn)。

    注:接口的主要缺點(diǎn)是不能代碼重用。
    類的主要缺點(diǎn)是繼承一個(gè)普通類后,在創(chuàng)建子類實(shí)例時(shí),父類也會(huì)創(chuàng)建一個(gè)實(shí)例,也就是說(shuō)更耗資源,同時(shí),也不能強(qiáng)迫子類必須繼承父類的某些方法。
    2008-04-27 13:56 | 銀河使者

    # re: 接口、類、抽象類、對(duì)象的另類解釋  回復(fù)  更多評(píng)論   

    至于對(duì)抽象類和接口的理解,看來(lái)我們2個(gè)中肯定有一個(gè)人是錯(cuò)了。

    1:類、抽象類都是oop的概念,而接口是后于oop的產(chǎn)物。不是說(shuō)抽象類比普通類+接口更有優(yōu)勢(shì)。恰恰相反的是,抽象類雖然提供了代碼重用,但是僅限于同一個(gè)類的繼承構(gòu)架(class hierarchy),/為了突破繼承構(gòu)架的束縛/才引入了接口的概念。

    2:接口雖然像是萬(wàn)能膠,可以定義到任何類中,但代價(jià)是:代碼必須獨(dú)立實(shí)現(xiàn),哪怕它們的實(shí)現(xiàn)代碼完全一致。(當(dāng)然如果代碼完全一致,還是有辦法可以重用的) 至于什么時(shí)候用接口和什么時(shí)候用繼承類也是根據(jù)情況而定。(它們各有優(yōu)缺點(diǎn),網(wǎng)上查吧,一堆呢) 但是要記住!接口在一定成都上破壞了oop,把無(wú)關(guān)東西關(guān)聯(lián)起來(lái)了。

    3:至于說(shuō)類的層層繼承構(gòu)架耗資源,如果你為了省資源要打破oop,那是你的事情了。沒(méi)人說(shuō)你必須或者不可以這樣做。

    討論了半天已經(jīng)偏了,但你的解釋的確夠另類的。你的文章因?yàn)榈窃诹薭logjava的閱讀提醒中,無(wú)意看見(jiàn)而已,并非無(wú)事找茬。如果你認(rèn)為我說(shuō)的哪點(diǎn)是不對(duì)的,歡迎指教。
    2008-04-27 14:59 | stanleyxu

    # re: 接口、類、抽象類、對(duì)象的另類解釋  回復(fù)  更多評(píng)論   

    哈哈,任何東西都有缺點(diǎn),抽象類也類例外。不能多繼承是目前大多數(shù)面象對(duì)象語(yǔ)言都存在的問(wèn)題,有利必有弊。但總體上是平衡的。最好是根據(jù)具體的需要使用接口、抽象類或普通類,以及它們的任意組合。沒(méi)有絕對(duì)的好壞之分。只要能滿足要求,就是正確的選擇。
    本文的目的并不是深究這些東東哪個(gè)更好,哪個(gè)不好。只是在itpub上有人不太明白接口、類、抽象類之間的關(guān)系,這是我的一個(gè)回答,希望對(duì)初學(xué)者有一些幫助。至于如何應(yīng)用它們才更好,并不是本文要討論的范圍。
    不過(guò)我衷心希望各位高手可以將自己的設(shè)計(jì)思想和設(shè)計(jì)理念共享出來(lái),以便和大家分享。謝謝!

    2008-04-27 15:12 | 銀河使者

    # re: 接口、類、抽象類、對(duì)象的另類解釋  回復(fù)  更多評(píng)論   

    to stanleyxu

    你說(shuō)接口破壞了oop的規(guī)則。在我看來(lái),先不管接口是否打破了oop。單就oop本身來(lái)說(shuō),它的存在并不是讓我們非得使用它,換句話說(shuō),我們不能為了使用oop而使用oop,就象有很多java framework,我們也不能為了使用它們而使用它們。

    雖然oop從總休上說(shuō)可以使大規(guī)模團(tuán)隊(duì)開發(fā)成為可能,但oop從某種程度上也確實(shí)增加了程序的復(fù)雜度,只是現(xiàn)在程序規(guī)模的增加程度遠(yuǎn)遠(yuǎn)超過(guò)了oop所給我們帶來(lái)的復(fù)雜程度,因此,我們感覺(jué)oop給我們帶來(lái)了方便。

    但如果各位讀過(guò)按著oop思想的編寫的源代碼。就會(huì)感覺(jué)到,讀起來(lái),要遠(yuǎn)比過(guò)程語(yǔ)言更難閱讀。當(dāng)然,我承認(rèn)有更好的讀oop源代碼的方法,但oop也確實(shí)正在使這個(gè)世界變得更復(fù)雜。哈哈,這個(gè)世界本來(lái)就很復(fù)雜!!多留戀當(dāng)初的匯編和C語(yǔ)言時(shí)代啊!沒(méi)有這么多概念,一切都是tech-to-tech。不過(guò)社會(huì)在發(fā)展,當(dāng)然,編程思想也得與時(shí)俱進(jìn)。但愿將來(lái)出個(gè)比oop更好的編程方式或技術(shù)。最好由計(jì)算機(jī)自己去編程,那樣程序員就可以一邊喝咖啡,一邊看著自己喜歡的video。盡情地享受生活。 是不是有些象科幻啊! 我就用火箭之父齊奧爾科夫斯基話過(guò)的一句話結(jié)尾吧:昨天的夢(mèng)想就是今天的希望,更是明天的現(xiàn)實(shí)。 但愿每個(gè)人天天做好夢(mèng),而且夢(mèng)想成真!
    2008-04-27 15:34 | 銀河使者

    # re: 接口、類、抽象類、對(duì)象的另類解釋  回復(fù)  更多評(píng)論   

    我只是告訴你,你文章的比喻錯(cuò)了。對(duì)類和接口的概念也有點(diǎn)問(wèn)題。
    但你下面說(shuō)的這些不知道是想干嘛。
    2008-04-29 12:42 | stanleyxu
    主站蜘蛛池模板: 亚洲AV无码成H人在线观看| 麻豆高清免费国产一区| 国产精品成人免费观看| 日韩精品免费在线视频| 91在线视频免费91| 亚洲成A人片在线观看无码3D | 亚洲hairy多毛pics大全| 一级做a爰片久久免费| 久久久久免费看成人影片| 免费国产成人高清视频网站| 亚洲AV乱码一区二区三区林ゆな| 亚洲AV无码一区二区三区人| 亚洲av永久中文无码精品综合 | 免费夜色污私人影院网站电影| 日韩午夜理论免费TV影院| 亚洲综合色一区二区三区小说| 日韩精品免费一线在线观看| 亚洲M码 欧洲S码SSS222| 热99RE久久精品这里都是精品免费 | 尤物永久免费AV无码网站| 亚洲人成网站影音先锋播放| 羞羞网站在线免费观看| 黄色成人网站免费无码av| 久久久久久亚洲精品成人| 水蜜桃视频在线观看免费播放高清| 午夜免费福利网站| 亚洲精品乱码久久久久久下载| 噼里啪啦免费观看高清动漫4| 亚洲好看的理论片电影| 日韩欧毛片免费视频| 麻豆91免费视频| 色拍自拍亚洲综合图区| 日韩精品免费电影| 久久青草免费91线频观看站街| 亚洲日韩国产精品乱-久| 亚洲一级毛片免费看| 亚洲最大的视频网站| 免费成人激情视频| 未满十八私人高清免费影院| 亚洲电影日韩精品| 最近2019免费中文字幕6|