1. 程式人生 > >抽象類(abstract)和接口(interface)的異同點

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

必須 spa 1.8 fin 存在 stat ace 矛盾 系統架構

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

相同點:

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

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

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

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

不同點(語法):

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

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

  抽象類中可以有非抽象方法,而接口中只能有抽象方法(JDK1.8開始,接口中可以通過default關鍵字來定義非抽象方法,解決擴展問題);

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

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

不同點(應用):

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

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