抽象類(abstract)和接口(interface)的異同點
阿新 • • 發佈:2018-05-30
必須 spa 1.8 fin 存在 stat ace 矛盾 系統架構
接口是抽象類的延伸,是抽象類的特殊化
相同點:
都可以寫抽象方法,規定了子類必須要重寫的方法(所以不能有抽象構造方法和抽象靜態方法);
為什麽不能有抽象構造方法:構造方法是類實例化時的構造過程,而抽象類不能被實例化,兩者矛盾,所以不存在抽象構造方法。
為什麽不能有抽象靜態方法:抽象方法是專用於繼承來實現的,而靜態方法可以被類及其對象調用,不能被繼承,兩者矛盾,所以不存在抽象靜態方法。
都不能被實例化,所以不能創建實例對象(由於沒有對應的具體概念);【可以用new 接口(){}的方法來當做匿名類,把方法作為參數來進行傳遞,註:這不是實例化】
不同點(語法):
抽象類是對類抽象,而接口是對行為抽象;
抽象類只能繼承一個,而接口可以實現多個;
抽象類中可以有非抽象方法,而接口中只能有抽象方法(JDK1.8開始,接口中可以通過default關鍵字來定義非抽象方法,解決擴展問題);
抽象類中可以有成員變量和屬性,而接口中只能有由static final修飾的常量;
抽象類有構造方法(為子類準備),而接口沒有構造方法;
不同點(應用):
抽象類在代碼實現方面發揮作用,可以實現代碼的重用;而接口更多的是在系統架構方面發揮作用,主要用於定義模塊之間的通信契約。
抽象類(abstract)和接口(interface)的異同點