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) 編輯 收藏