接口和抽象類有什么區別


他們都不能實例化對象,都可以包含抽象方法,而且抽象方法必須被繼承的類全部實現。

區別:

1、抽象類和接口都不能直接實例化,如果要實例化,抽象類變量必須指向實現所有抽象方法的子類對象,接口變量必須指向實現所有接口方法的類對象。

2、抽象類要被子類繼承,接口要被類實現。

3、接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實現

4、接口里定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量。

5、抽象類里的抽象方法必須全部被子類所實現,如果子類不能全部實現父類抽象方法,那么該子類只能是抽象類。同樣,一個實現接口的時候,如不能全部實現接口方法,那么該類也只能為抽象類。

6、抽象方法只能申明,不能實現,接口是設計的結果 ,抽象類是重構的結果

7、抽象類里可以沒有抽象方法

8、如果一個類里有抽象方法,那么這個類只能是抽象類

9、抽象方法要被實現,所以不能是靜態的,也不能是私有的。

10、接口可繼承接口,並可多繼承接口,但類只能單根繼承。

參數 抽象類 接口
默認的方法實現 它可以有默認的方法實現 接口完全是抽象的。它根本不存在方法的實現
實現

子類使用extends關鍵字來繼承抽象類。如果子類不

是抽象類的話,它需要提供抽象類中所有聲明的方法的實現。

子類使用關鍵字implements來實現接口。

它需要提供接口中所有聲明的方法的實現

構造器 抽象類可以有構造器 接口不能有構造器
與正常Java類的區別 除了你不能實例化抽象類之外,它和普通Java類沒有任何區別 接口是完全不同的類型
訪問修飾符 抽象方法可以有public、protected和default這些修飾符 接口方法默認修飾符是public。你不可以使用其它修飾符。
main方法 抽象方法可以有main方法並且我們可以運行它

接口沒有main方法,因此我們不能運行它。

(java8以后接口可以有default和static方法,所以可以運行main方法)

多繼承 抽象方法可以繼承一個類和實現多個接口 接口只可以繼承一個或多個其它接口
速度 它比接口速度要快 接口是稍微有點慢的,因為它需要時間去尋找在類中實現的方法。
添加新方法 如果你往抽象類中添加新的方法,你可以給它提供默認的實現。因此你不需要改變你現在的代碼。 如果你往接口中添加方法,那么你必須改變實現該接口的類。

抽象類可以提供成員方法的實現細節,而接口中只能存在public abstract 方法;
抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是public static final類型的;
接口中不能含有靜態代碼塊以及靜態方法,而抽象類可以有靜態代碼塊和靜態方法;
一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。


免責聲明!

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



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