接口是抽象類的延伸,是抽象類的特殊化
相同點:
都可以寫抽象方法,規定了子類必須要重寫的方法(所以不能有抽象構造方法和抽象靜態方法);
為什么不能有抽象構造方法:構造方法是類實例化時的構造過程,而抽象類不能被實例化,兩者矛盾,所以不存在抽象構造方法。
為什么不能有抽象靜態方法:抽象方法是專用於繼承來實現的,而靜態方法可以被類及其對象調用,不能被繼承,兩者矛盾,所以不存在抽象靜態方法。
都不能被實例化,所以不能創建實例對象(由於沒有對應的具體概念);【可以用new 接口(){}的方法來當做匿名類,把方法作為參數來進行傳遞,注:這不是實例化】
不同點(語法):
抽象類是對類抽象,而接口是對行為抽象;
抽象類只能繼承一個,而接口可以實現多個;
抽象類有構造方法(為子類准備),而接口沒有構造方法;
抽象類中可以有非抽象方法,而接口中只能有抽象方法,並且只能是public類型的,默認為 public abstract 類型(JDK1.8開始,接口中可以通過default關鍵字來定義非抽象方法,解決擴展問題);
抽象類中可以有成員變量和屬性,而接口中只能有由static final修飾的常量;
抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以是任意類型,但接口中定義的變量只能是 public static final 類型,並且默認為 public static final 類型。
不同點(應用):
抽象類在代碼實現方面發揮作用,可以實現代碼的重用;而接口更多的是在系統架構方面發揮作用,主要用於定義模塊之間的通信契約。
這道題的思路是先從整體解釋抽象類與接口的概念,然后答比較兩者的相同點,接下來答語法方面的區別,最后答應用方面的區別。
比較兩者語法區別的條理是:先從本質區別開始,然后是繼承性,構造方法,抽象方法,成員變量和屬性以及常量,最后是靜態成員變量。
若有錯誤之處,歡迎指正。謝謝!