1
、概念:
抽象類(
abstract class
):宣告方法的存在但不去實現它的類叫做抽象類。抽象類中可以有實現了的方法,也可以沒有實現了的方法;抽象類中可以沒有抽象的方法,但有抽象方法的類一定是抽象類。抽象類與普通類最大的區別是它不能被直接例項化,只能通過子類間接例項化。
介面(inte***ce
):是抽象類的變體。其中所有的方法都是抽象類,且只能定義
static final
成員變數。 2
、區別兩者的相同點:(1
)兩者都是抽象類,都不能例項化。(2
)inte***ce
實現類及
abstract class
的子類都必須要實現已經宣告的抽象方法。
兩者的不同點:(1
)乙個類可以實現
(implements)
多個inte***ce
,但乙個類只能繼承
(extends)
乙個abstract class (
2)inte***ce
強調特定功能的實現,具有哪些功能;而
abstract class
強調所屬關係。(3
)儘管inte***ce
實現類及
abstract class
的子類都必須要實現相應的抽象方法,但實現的形式不同。
inte***ce
中的每乙個方法都是抽象方法,都只是宣告的
(declaration,
沒有方法體
),實現類必須要實現。而
abstract class
的子類可以有選擇地實現(只實現其中的抽象方法;覆蓋其中已實現了的方法;二者均實現)。(4
)inte***ce
是完全抽象的,只能宣告方法,而且只能宣告
public
的方法,不能宣告
private
及protected
的方法,不能定義方法體,也不能宣告例項變數。
abstract class
在inte***ce
及class
中起到了承上啟下的作用。一方面,
abstract class
是抽象的,可以宣告抽象方法,以規範子類必須實現的功能;另一方面,它又可以定義預設的方法體,供子類直接使用或覆蓋。另外,它還可以定義自己的例項變數,以供子類通過繼承來使用。 3
、應用場合
3.1 inte***ce
的應用場合
a. 類與類之前需要特定的介面進行協調,而不在乎其如何實現。
b. 作為能夠實現特定功能的標識存在,也可以是什麼介面方法都沒有的純粹標識。
c. 需要將一組類視為單一的類,而呼叫者只通過介面來與這組類發生聯絡。
d. 需要實現特定的多項功能,而這些功能之間可能完全沒有任何聯絡。
3.2 abstract class
的應用場合
一句話,在既需要統一的介面,又需要例項變數或缺省的方法的情況下,就可以使用它。最常見的有:
a. 定義了一組介面,但又不想強迫每個實現類都必須實現所有的介面。可以用
abstract class
定義一組方法體,甚至可以是空方法體,然後由子類選擇自己所感興趣的方法來覆蓋。
b. 某些場合下,只靠純粹的介面不能滿足類與類之間的協調,還必需類中表示狀態的變數來區別不同的關係。
abstract
的中介作用可以很好地滿足這一點。
c. 規範了一組相互協調的方法,其中一些方法是共同的,與狀態無關的,可以共享的,無需子類分別實現;而另一些方法卻需要各個子類根據自己特定的狀態來實現特定的功能。
JAVA 中 抽象類和介面的區別
含有abstract修飾符的class 即為抽象類,abstract類不能建立例項物件,含有abstract的方法的類必須定義為abstract class abstract class 裡的方法不必是抽象的,抽象來中定義抽象方法必須放在具體子類中實現,所以呀,不能有抽象的構造方法或抽象的靜態方法,...
java中抽象類和介面的區別
在物件導向的概念中,我們知道所有的物件都是通過類來描繪的,但是並不是所有的類都是用來描繪物件的,如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這樣的類就是抽象類。抽象類往往用來表徵我們在對問題領域進行分析 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象,我們不能把它...
Java中抽象類和介面的區別
區別一,兩者表達的概念不一樣。抽象類是一類事物的高度聚合,那麼對於繼承抽象類的子類來說,對於抽象類來說,屬於 是 的關係 而介面是定義行為規範,因此對於實現介面的子類來說,相對於介面來說,是 行為需要按照介面來完成 區別二,抽象類在定義型別方法的時候,可以給出方法的實現部分,也可以不給出 而對於介面...