抽象類(abstract)和接口(interface)的異同點


接口是抽象類的延伸,是抽象類的特殊化

相同點:

  都可以寫抽象方法,規定了子類必須要重寫的方法(所以不能有抽象構造方法和抽象靜態方法);

      為什么不能有抽象構造方法:構造方法是類實例化時的構造過程,而抽象類不能被實例化,兩者矛盾,所以不存在抽象構造方法。

      為什么不能有抽象靜態方法:抽象方法是專用於繼承來實現的,而靜態方法可以被類及其對象調用,不能被繼承,兩者矛盾,所以不存在抽象靜態方法。

  都不能被實例化,所以不能創建實例對象(由於沒有對應的具體概念);【可以用new 接口(){}的方法來當做匿名類,把方法作為參數來進行傳遞,注:這不是實例化

不同點(語法):

  抽象類是對類抽象,而接口是對行為抽象;

  抽象類只能繼承一個,而接口可以實現多個;

  抽象類有構造方法(為子類准備),而接口沒有構造方法;

  抽象類中可以有非抽象方法,而接口中只能有抽象方法,並且只能是public類型的,默認為 public abstract 類型(JDK1.8開始,接口中可以通過default關鍵字來定義非抽象方法,解決擴展問題);

  抽象類中可以有成員變量和屬性,而接口中只能有由static final修飾的常量;

  抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以是任意類型,但接口中定義的變量只能是 public static final 類型,並且默認為 public static final 類型。

不同點(應用):

  抽象類在代碼實現方面發揮作用,可以實現代碼的重用;而接口更多的是在系統架構方面發揮作用,主要用於定義模塊之間的通信契約。

 

這道題的思路是先從整體解釋抽象類與接口的概念,然后答比較兩者的相同點,接下來答語法方面的區別,最后答應用方面的區別。

比較兩者語法區別的條理是:先從本質區別開始,然后是繼承性,構造方法,抽象方法,成員變量和屬性以及常量,最后是靜態成員變量。

 

若有錯誤之處,歡迎指正。謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM