JAVA 介面和抽象類的區別

2021-08-11 14:33:45 字數 1212 閱讀 9797

抽象類就是為了繼承而存在。雖然沒有抽象方法也可以是抽象類,但我覺得這樣是沒有意義的。

介面是極度抽象的東西,比抽象類更抽象。

打星號了!!。

1.語法層面上的區別

1)抽象類可以提供成員方法的實現細節,而介面中只能存在public abstract 方法;

2)抽象類中的成員變數可以是各種型別的,而介面中的成員變數只能是public static final型別的;

3)介面中不能含有靜態**塊以及靜態方法,而抽象類可以有靜態**塊和靜態方法;

4)乙個類只能繼承乙個抽象類,而乙個類卻可以實現多個介面。

2.設計層面上的區別

1)抽象類是對一種事物的抽象,即對類抽象,而介面是對行為的抽象。抽象類是對整個類整體進行抽象,包括屬性、行為,但是介面卻是對類區域性(行為)進行抽象。舉個簡單的例子,飛機和鳥是不同類的事物,但是它們都有乙個共性,就是都會飛。那麼在設計的時候,可以將飛機設計為乙個類airplane,將鳥設計為乙個類bird,但是不能將 飛行 這個特性也設計為類,因此它只是乙個行為特性,並不是對一類事物的抽象描述。此時可以將 飛行 設計為乙個介面fly,包含方法fly( ),然後airplane和bird分別根據自己的需要實現fly這個介面。然後至於有不同種類的飛機,比如戰鬥機、民用飛機等直接繼承airplane即可,對於鳥也是類似的,不同種類的鳥直接繼承bird類即可。從這裡可以看出,繼承是乙個 「是不是」的關係,而 介面 實現則是 「有沒有」的關係。如果乙個類繼承了某個抽象類,則子類必定是抽象類的種類,而介面實現則是有沒有、具備不具備的關係,比如鳥是否能飛(或者是否具備飛行這個特點),能飛行則可以實現這個介面,不能飛行就不實現這個介面。

2)設計層面不同,抽象類作為很多子類的父類,它是一種模板式設計。而介面是一種行為規範,

例子:

報警功能的門。

inte***ce alram

abstract class door

class alarmdoor extends door implements alarm

void close()

void alarm()

}

door的open()、close()和alarm()不屬於同一型別的行為。

open()和close()屬於門的特性,而alarm()則屬於附加的行為。所以最好解決方法就是open和close在門的抽象類,而alarm用介面實現。

參考資料

Java介面和抽象類區別

abstract class inte ce 繼承性單繼承 多實現方法 抽象方法 具體方法 抽象方法 filed 宣告 使用filed欄位 建立的為靜態常量 final static 訪問許可權 public protected private或package public 構造器有 無介面特點 a...

Java 介面和抽象類的區別

1 抽象類可以有構造方法 介面不可以有構造方法 2 抽象類可以有普通成員變數 介面不可以有普通成員變數 3 抽象類可以包含普通非抽象的方法 介面中所有方法都必須是抽象的,不能有非抽象的普通方法 4 抽象類下的抽象方法訪問型別可以是public protected 但介面的訪問型別必須是public,...

java介面和抽象類的區別

抽象類和介面的區別?1 成員區別 抽象類 成員變數 可以是變數,也可以是常量 成員方法 可以抽象,也可以非抽象 建構函式 有 介面 成員變數 只能是常量 成員方法 只可以抽象 建構函式 沒有建構函式 2 關係區別 類與類 繼承,單繼承 類與介面 實現,單實現,多實現 介面與介面 繼承,單繼承,多繼承...