(十二)介面 (以及與抽象類的區別)

2021-07-24 00:16:02 字數 1810 閱讀 8978

介面

主要用來描述類具有什麼功能,而不給出具體實現。

乙個類可以實現多個介面。實現介面的類必須實現介面的所有方法。

介面可以定義任意型別的常量,但不能定義變數(例項域)。實現介面的類中可以訪問介面定義的常量,但不能更改這些常量(static)。

介面不能實現方法。

1、相同點

a. 兩者都不能例項化。

b. inte***ce實現類及abstrct class的子類都必須要實現已經宣告的抽象方法。

2.、不同點

a. inte***ce需要實現,要用implements,而abstract class需要繼承,要用extends。

b. 乙個類可以實現多個inte***ce,但乙個類只能繼承乙個abstract class。

c. inte***ce強調特定功能的實現,而abstract class強調所屬關係。

d. 儘管inte***ce實現類及abstrct class的子類都必須要實現相應的抽象方法,但實現的形式不同。inte***ce中的每乙個方法都是抽象方法,都只是宣告的(declaration, 沒有方法體),實現類必須要實現。而abstract class的子類可以有選擇地實現。

這個選擇有兩點含義:

一是abastract class中並非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子類必須實現。那些沒有abstract的方法,在abstrct class中必須定義方法體。

二是abstract class的子類在繼承它時,對非抽象方法既可以直接繼承,也可以覆蓋;而對抽象方法,可以選擇實現,也可以通過再次宣告其方法為抽象的方式,無需實現,留給其子類來實現,但此類必須也宣告為抽象類。既是抽象類,當然也不能例項化。

e. abstract class是inte***ce與class的中介。

inte***ce是完全抽象的,只能宣告方法,而且只能宣告pulic的方法,不能宣告private及protected的方法,不能定義方法體,也不能宣告例項變數。然而,inte***ce卻可以宣告常量變數,並且在jdk中不難找出這種例子。但將常量變數放在inte***ce中違背了其作為介面的作用而存在的宗旨,也混淆了inte***ce與類的不同價值。如果的確需要,可以將其放在相應的abstract class或class中。

abstract class在inte***ce及class中起到了承上啟下的作用。一方面,abstract class是抽象的,可以宣告抽象方法,以規範子類必須實現的功能;另一方面,它又可以定義預設的方法體,供子類直接使用或覆蓋。另外,它還可以定義自己的例項變數,以供子類通過繼承來使用。

3、inte***ce的應用場合

a. 類與類之前需要特定的介面進行協調,而不在乎其如何實現。

b. 作為能夠實現特定功能的標識存在,也可以是什麼介面方法都沒有的純粹標識。

c. 需要將一組類視為單一的類,而呼叫者只通過介面來與這組類發生聯絡。

d. 需要實現特定的多項功能,而這些功能之間可能完全沒有任何聯絡。

4、abstract class的應用場合

一句話,在既需要統一的介面,又需要例項變數或缺省的方法的情況下,就可以使用它。最常見的有:

a. 定義了一組介面,但又不想強迫每個實現類都必須實現所有的介面。可以用abstract class定義一組方法體,甚至可以是空方法體,然後由子類選擇自己所感興趣的方法來覆蓋。

b. 某些場合下,只靠純粹的介面不能滿足類與類之間的協調,還必需類中表示狀態的變數來區別不同的關係。abstract的中介作用可以很好地滿足這一點。

c. 規範了一組相互協調的方法,其中一些方法是共同的,與狀態無關的,可以共享的,無需子類分別實現;而另一些方法卻需要各個子類根據自己特定的狀態來實現特定的功能

介面與抽象類區別

介面是公開的,裡面不能有私有的方法或變數,是用於讓別人使用的,而抽象類是可以有私有方法或私有變數的,另外,實現介面的一定要實現介面裡定義的所有方法,而實現抽象類可以有選擇地重寫需要用到的方法,一般的應用裡,最頂級的是介面,然後是抽象類實現介面,最後才到具體類實現。還有,介面可以實現多重繼承,而乙個類...

介面與抽象類區別

1 從形態上 抽象類可以給出一些成員的實現,介面卻不包含成員的實現。抽象類的抽象成員可被子類部分實現,介面的成員需要實現類完全實現,乙個類只能繼承乙個抽象類,但可實現多個介面 2 類是對物件的抽象,抽象類是對類的抽象,介面是對行為的抽象。也就是說介面是對類的區域性 行為 進行的抽象,而抽象類是對整體...

介面 與 抽象類 區別

抽像類和介面 區別 首先抽象類 1.抽象類不能被例項化,但可以被申明 2.抽象類不一定包含抽像方法 3.一旦類包含了abstract 方法那麼這個類必須宣告 關鍵字 abstract 4.抽像放不放不能有主體就是方法體 5,但是抽象類可以擁有實現的方法 6.乙個類只能繼承乙個抽像類 其次 是介面,就...