抽象類與介面

2021-06-16 17:39:47 字數 1820 閱讀 2629

記住抽象類與普通類的唯一區別就是不能建立例項物件和允許有abstract

方法含有abstract

修飾符的

class

即為抽象類,

abstract

類不能建立的例項物件。含有

abstract

方法的類必須定義為

abstract class

,abstract class

類中的方法不必是抽象的。

abstract class類中定義抽象方法必須在具體

(concrete)

子類中實現,

所以,不能有抽象構造方法或抽象靜態方法

。如果的子類沒有實現抽象父類中的所有抽象方法,那麼子類也必須定義為abstract

型別。

介面(inte***ce

)可以說成是抽象類的一種特例,介面中的所有方法都必須是抽象的

。介面中的方法定義預設為public abstract型別,

介面中的成員變數型別預設為public static final。

下面比較一下兩者的語法區別:

1.抽象類可以有

構造方法

,介面中不能有構造方法。

2.抽象類中可以有

普通成員變數

,介面中沒有普通成員變數

3.抽象類中可以

包含非抽象的普通方法

,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法。

4. 抽象類中的抽象方法的訪問型別可以是

public

,protected

和(預設型別,雖然

eclipse下不報錯,但應該也不行),但介面中的抽象方法只能是

public

型別的,並且預設即為

public abstract

型別。

5. 抽象類中可以包

含靜態方法

,介面中不能包含靜態方法

6. 抽象類和介面中都可以包含靜態成員變數,抽象類中的靜態成員變數的訪問型別可以任意,但介面中定義的變數只能是

public static final

型別,並且預設即為public static final

型別。

7. 乙個類可以實現多個介面,但只能繼承乙個抽象類。

下面接著再說說兩者在應用上的區別:

介面更多的是在系統架構設計方法發揮作用,主要用於定義模組之間的通訊契約。而抽象類在**實現方面發揮作用,可以實現**的重用,例如,模板方法設計模式是抽象類的乙個典型應用,假設某個專案的所有servlet

類都要用相同的方式進行許可權判斷、記錄訪問日誌和處理異常,那麼就可以定義乙個抽象的基類,讓所有的

servlet

都繼承這個抽象基類,在抽象基類的

service

方法中完成許可權判斷、記錄訪問日誌和處理異常的**,在各個子類中只是完成各自的業務邏輯**,偽**如下:

//注意訪問許可權定義成

protected

,顯得既專業,又嚴謹,因為它是專門給子類用的 }

public class myservlet1 extendsbaseservlet

}父類方法中間的某段**不確定,留給子類幹,就用模板方法設計模式。

介面與抽象類

介面與抽象類區別 個人總結 語法結構 1 型別可以繼承多個介面,但是只能繼承乙個抽象類,即不支援多重繼承。2 介面可以用於值型別和引用型別,例如struct和class,而抽象類不能用於值型別,只能用於引用型別。3 抽象類定義可以包括建構函式,字段資料,非抽象成員 具體實現 等,而介面只能包括抽象成...

介面與抽象類

抽象類 當抽象類作為父類時,他的子類對其中的抽象類方法有不同的方法體 簡單舉例為 classhorse mammal,ilangbound public int numeroflegs return 4 inte ce ilandbound int numberoflegs 介面例子 main函式 ...

抽象類與介面

在物件導向的概念中,所有的物件都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪物件的,如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這樣的類就是抽象類。在物件導向中,抽象類主要用來進行型別隱藏和充當全域性變數的角色。舉個例子,水果 是個抽象類,指可以食用的植物果實和種子,有水分和糖分...