• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見(jiàn)諒!~
            隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            java中的接口和抽象類(lèi)區(qū)別

                   首先,我們來(lái)看一下抽象類(lèi)的概念,java編程思想中說(shuō)萬(wàn)物皆對(duì)象,我們知道所有的對(duì)象都是通過(guò)類(lèi)來(lái)描繪的,但是反過(guò)來(lái)卻不是這樣。并不是所有的類(lèi)都是用來(lái)描繪對(duì)象的,如果一個(gè)類(lèi)中沒(méi)有包含足夠的信息來(lái)描繪一個(gè)具體的對(duì)象,這樣的類(lèi)就是抽象類(lèi)。抽象類(lèi)是表征我們對(duì)問(wèn)題領(lǐng)域進(jìn)行分析、設(shè)計(jì)中得出的抽象概念,是對(duì)一系列看上去不同,但是本質(zhì)上相同的具體概念的抽象。好比,我們都知道三角形是一個(gè)形狀,世界上有三角形這樣具體的東西,但是確沒(méi)有形狀這樣具體的東西,我們要描述這個(gè)形狀的概念就要用到抽象類(lèi)。因此在java中抽象類(lèi)是不允許被實(shí)例化的。
            在面向?qū)ο箢I(lǐng)域,抽象類(lèi)主要用來(lái)進(jìn)行類(lèi)型隱藏。那什么是類(lèi)型隱藏呢?我們可以構(gòu)造出一個(gè)固定的一組行為的抽象描述,但是這組行為卻能夠有任意個(gè)可能的具體實(shí)現(xiàn)方式。這個(gè)抽象描述就是抽象類(lèi),而這一組任意個(gè)可能的具體實(shí)現(xiàn)則表現(xiàn)為所有可能的派生類(lèi)。好比,動(dòng)物是一個(gè)抽象類(lèi),人、猴子、老虎就是具體實(shí)現(xiàn)的派生類(lèi),我們就可以用動(dòng)物類(lèi)型來(lái)隱藏人、猴子和老虎的類(lèi)型。
            再來(lái)看一下接口,接口是什么呢?Java中的接口是一系列方法的聲明,是一些方法特征的集合,一個(gè)接口只有方法的特征沒(méi)有方法的實(shí)現(xiàn),因此這些方法可以在不同的地方被不同的類(lèi)實(shí)現(xiàn),而這些實(shí)現(xiàn)可以具有不同的行為(功能)。接口是一種特殊形式的抽象類(lèi)。

            抽象類(lèi)和接口有很大的區(qū)別,首先,抽象類(lèi)在Java語(yǔ)言中表示的是一種繼承關(guān)系,一個(gè)類(lèi)只能使用一次繼承關(guān)系。但是,一個(gè)類(lèi)卻可以實(shí)現(xiàn)多個(gè)接口。也許,這是Java語(yǔ)言的設(shè)計(jì)者在考慮Java對(duì)于多重繼承的支持方面的一種折中考慮吧。
            其次,在抽象類(lèi)的定義中,我們可以賦予方法的默認(rèn)行為。但是在接口的定義中,方法卻不能擁有默認(rèn)行為,為了繞過(guò)這個(gè)限制,必須使用委托,但是這會(huì) 增加一些復(fù)雜性,有時(shí)會(huì)造成很大的麻煩。
            已經(jīng)提到過(guò),抽象類(lèi)在Java語(yǔ)言中體現(xiàn)了一種繼承關(guān)系,要想使得繼承關(guān)系合理,父類(lèi)和派生類(lèi)之間必須存在”is a”關(guān)系,即父類(lèi)和派生類(lèi)在概念本質(zhì)上應(yīng)該是相同的。對(duì)于接口來(lái)說(shuō)則不然,并不要求接口的實(shí)現(xiàn)者和接口定義在概念本質(zhì)上是一致的,僅僅是實(shí)現(xiàn)了接口定義的契約而已。接口表示的是”like a”關(guān)系。

            使用抽象類(lèi)來(lái)定義允許多個(gè)實(shí)現(xiàn)的類(lèi)型,比使用接口有一個(gè)明顯的優(yōu)勢(shì):抽象類(lèi)的演化比接口的演化要容易的多。在后續(xù)的發(fā)行版中,如果希望在抽象類(lèi)中增加一個(gè)方法,只增加一個(gè)默認(rèn)的合理的實(shí)現(xiàn)即可,抽象類(lèi)的所有實(shí)現(xiàn)都自動(dòng)提供了這個(gè)新的方法。對(duì)于接口,這是行不通的。雖然可以在骨架實(shí)現(xiàn)類(lèi)中增加一方法的實(shí)現(xiàn)來(lái)解決部分問(wèn)題,但這不能解決不從骨架實(shí)現(xiàn)類(lèi)繼承的接口實(shí)現(xiàn)的問(wèn)題。由此,設(shè)計(jì)公有的接口要非常謹(jǐn)慎,一旦一個(gè)接口被公開(kāi)且被廣泛實(shí)現(xiàn),對(duì)它進(jìn)行修改將是不可能的。

            所以,使用接口還是抽象類(lèi),取決于我們對(duì)問(wèn)題的概念的本質(zhì)理解和設(shè)計(jì)的意圖。

            //---------------------------------------------------------------------

                    類(lèi)描述了一個(gè)實(shí)體,包括實(shí)體的狀態(tài),也包括實(shí)體可能發(fā)出的動(dòng)作。

              接口定義了一個(gè)實(shí)體可能發(fā)出的動(dòng)作。但是只是定義了這些動(dòng)作的原型,沒(méi)有實(shí)現(xiàn),也沒(méi)有任何狀態(tài)信息。

              所以接口有點(diǎn)象一個(gè)規(guī)范、一個(gè)協(xié)議,是一個(gè)抽象的概念;而類(lèi)則是實(shí)現(xiàn)了這個(gè)協(xié)議,滿(mǎn)足了這個(gè)規(guī)范的具體實(shí)體,是一個(gè)具體的概念。

              從程序角度,簡(jiǎn)單理解,接口就是函數(shù)聲明,類(lèi)就是函數(shù)實(shí)現(xiàn)。需要注意的是同一個(gè)聲明可能有很多種實(shí)現(xiàn)。 

              1、接口中定義類(lèi)方法的原型,但是不能說(shuō)是空方法,因?yàn)榭辗椒ǖ囊馑际怯袑?shí)現(xiàn)體,只不過(guò)實(shí)現(xiàn)體是空操作。實(shí)際上接口沒(méi)有定義任何實(shí)現(xiàn)體。具體的實(shí)現(xiàn)體都是在實(shí)現(xiàn)接口的類(lèi)中,接口只是定義了這些方法的調(diào)用方式。

              你當(dāng)然也可以不用接口,直接在類(lèi)里面寫(xiě)方法,但是如果你的一組方法需要在很多類(lèi)里實(shí)現(xiàn),那么把它們抽象出來(lái),做成一個(gè)接口規(guī)范,不是更好么?

              2、一個(gè)類(lèi)描述了一個(gè)實(shí)體,這個(gè)實(shí)體可能是一個(gè)復(fù)雜的對(duì)象,它的動(dòng)作很多,如果把這些動(dòng)作分類(lèi),用接口a定義其中的某一組動(dòng)作,接口b定義其中的另外一組動(dòng)作,這樣的結(jié)構(gòu),比較清楚。

              這種方式具備了多繼承的優(yōu)點(diǎn),避免了多繼承的缺陷。實(shí)際上在歷史上,接口在很大程度上,是為了解決多繼承帶來(lái)的種種問(wèn)題而設(shè)計(jì)出來(lái)的。

              3、包中那些已定義的接口,怎么知道那里面定義了什么方法。

              接口里定義了方法的輸入輸出,這些都是協(xié)議,具體的實(shí)現(xiàn)都在每個(gè)類(lèi)中。對(duì)于很多只需要抽象接口的地方,不需要知道具體的類(lèi)是什么,只要這個(gè)類(lèi)實(shí)現(xiàn)了這個(gè)接口就可以了。

             

            當(dāng)然,以上只是對(duì)接口的初步認(rèn)識(shí),在對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)有更深入的認(rèn)識(shí)以后,會(huì)發(fā)現(xiàn)接口有更廣泛的用途。

             

            另外,抽象類(lèi)不能被實(shí)例化,也就是說(shuō),不能創(chuàng)建抽象類(lèi)的任何對(duì)象。必須創(chuàng)建抽象類(lèi)的子類(lèi),然后再創(chuàng)建子類(lèi)的對(duì)象。一個(gè)接口可以繼承多個(gè)接口,一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口。

             

            posted on 2009-08-26 23:06 肥仔 閱讀(437) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Web-后臺(tái)

            天天综合久久一二三区| 久久精品人人做人人妻人人玩| 大伊人青草狠狠久久| 国产精品无码久久久久久| 69久久精品无码一区二区| 久久99精品久久久久久秒播| 免费精品久久久久久中文字幕| 奇米影视7777久久精品人人爽| 国产精品久久久久AV福利动漫| 久久91这里精品国产2020| 亚洲国产一成人久久精品| 久久99国产精品99久久| 亚洲欧美国产日韩综合久久| 九九精品99久久久香蕉| 性做久久久久久免费观看| 久久精品国产亚洲网站| 一级a性色生活片久久无| …久久精品99久久香蕉国产| 久久久国产99久久国产一| 久久中文字幕一区二区| 久久久久久久97| 欧美粉嫩小泬久久久久久久 | 久久性生大片免费观看性| 亚洲中文精品久久久久久不卡| 国产视频久久| 国产Av激情久久无码天堂| 色偷偷88欧美精品久久久| 99久久国产免费福利| 99久久精品国产免看国产一区| 久久人人爽人人爽人人爽| 久久996热精品xxxx| 亚洲国产精品久久久久久| 久久久精品国产sm调教网站 | 精品乱码久久久久久夜夜嗨| 国产精品久久久亚洲| 色综合久久无码五十路人妻| 久久精品免费全国观看国产| 中文字幕无码久久久| 日本五月天婷久久网站| 中文字幕无码av激情不卡久久| 久久精品视频一|