兩者之間還是有很大的區(qū)別的,對于它們的選擇甚至反映出對于問題領(lǐng)域本質(zhì)的理解落午、對于設(shè)計意圖的理解是否正確平夜、合理。
~~~~~~~ | Abstract Class | Interface |
---|---|---|
實例化 | 不能 | 不能 |
類 | 是一種繼承關(guān)系,一個類只能使用一次繼承關(guān)系.可以通過繼承多個接口實現(xiàn)多重繼承 | 一個類可以實現(xiàn)多個接口 |
數(shù)據(jù)成員 | 可以由自己的 | 必須是static final的.一般不在此處定義變量 |
方法 | 可以有私有方法,有非abstract方法,如果有abstract方法,子類必須實現(xiàn),否則也必須是abstract的 | 默認是public abstract類型 |
變量 | 可以有私有的,可以在子類重新定義和賦值 | 默認是public static final的 |
設(shè)計理念 | 表示的”is-a”關(guān)系 | 表示是”like-a”關(guān)系 |
實現(xiàn) | 需要繼承,要用extends關(guān)鍵字 | implements關(guān)鍵字 |
應(yīng)用 | 主要在代碼實現(xiàn)方面發(fā)揮作用,用于實現(xiàn)代碼的重用 | 主要在架構(gòu)設(shè)計方面發(fā)揮作用,主要用于定義模塊間的通信契約 |