記住抽象類與普通類的唯一區別就是不能建立例項物件和允許有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函式 ...
抽象類與介面
在物件導向的概念中,所有的物件都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪物件的,如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這樣的類就是抽象類。在物件導向中,抽象類主要用來進行型別隱藏和充當全域性變數的角色。舉個例子,水果 是個抽象類,指可以食用的植物果實和種子,有水分和糖分...