介面與抽象類的區別

2021-07-28 01:36:36 字數 1601 閱讀 5680

程式開發中,我們經常需要編寫一系列的介面以及抽象類來供實現或被子類繼承。那麼,介面與抽象類之間的語法到底有什麼區別呢?下邊是我在學習中的一些感悟與總結,如有錯誤之處,歡迎指正!

含有abstract修飾符的class即為抽象類,abstract 類不能建立的例項物件。含有abstract方法的類必須定義為abstract class,abstract class類中的方法不必是抽象的。abstract class類中定義抽象方法必須在具體(concrete)子類中實現,所以,不能有抽象構造方法或抽象靜態方法。如果的子類沒有實現抽象父類中的所有抽象方法,那麼子類也必須定義為abstract型別。

介面(inte***ce)可以說成是抽象類的一種特例,介面中的所有方法都必須是抽象的。介面中的方法定義預設為public abstract型別,介面中的成員變數型別預設為public static final。

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

抽象類可以有構造方法,介面中不能有構造方法;

抽象類中可以有普通成員變數,介面中沒有普通成員變數;

抽象類中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法;

抽象類中的抽象方法的訪問型別可以是public,protected和(預設型別,雖然eclipse下不報錯,但應該也不行),但介面中的抽象方法只能是public型別的,並且預設即為public abstract型別;

抽象類中可以包含靜態方法,介面中不能包含靜態方法;

抽象類和介面中都可以包含靜態成員變數,抽象類中的靜態成員變數的訪問型別可以任意,但介面中定義的變數只能是public static final型別,並且預設即為public static final型別;

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

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

介面更多的是在系統架構設計方法發揮作用,主要用於定義模組之間的通訊契約。而抽象類在**實現方面發揮作用,可以實現**的重用,例如,模板方法設計模式是抽象類的乙個典型應用,假設某個專案的所有servlet類都要用相同的方式進行許可權判斷、記錄訪問日誌和處理異常,那麼就可以定義乙個抽象的基類,讓所有的servlet都繼承這個抽象基類,在抽象基類的service方法中完成許可權判斷、記錄訪問日誌和處理異常的**,在各個子類中只是完成各自的業務邏輯**,偽**如下:

//注意訪問許可權定義成protected,顯得既專業,又嚴謹,因為它是專門給子類用的

}public

class

myservlet1

extends

baseservlet

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

介面與抽象類區別

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

介面與抽象類區別

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

介面 與 抽象類 區別

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