java中 抽象類和接口的區別, 什么時候用抽象類?什么時候用接口?


抽象類是對類的抽象,接口是對行為的抽象

 

區別:

相同點

接口和抽象類都不能被實例化,它們都位於繼承樹的頂端,用於被其他類實現和繼承。

接口和抽象類都可以包含抽像方法,實現接口或繼承抽象類的普通子類都必須實現這些抽象方法。

不同點

接口中只能包含抽象方法,而抽象類則完全可以包含普通方法。

接口中不能定義靜態方法,而抽象類中可以定義靜態方法。

接口中只能定義靜態常量,不能定義普通變量,或非靜態的常量,而抽象類中則可以定義不同的屬性,也可以定義靜態的屬性。

接口中不包含構造器,而抽象類中可以包含構造器,抽象類中的構造器並不用於創建對象,而是讓其子類調用這些構造器來完成抽象類的初始化操作。

一個類最多只能有一個直接父類,包括抽象類,而一個類可以實現多個接口。通過實現多個接口可以彌補Java單繼承的不足。

 

什么時候用抽象類?什么時候用接口?

滿足以下條件是最好使用抽象類:
a)子類不繼承其它父類
b)子類中存在完全相同的功能實現的方法
c)子類中存在相同的屬性
d)設計出的結構需要繼承其它類
當需要滿足d條件時,只能使用抽象類,抽象類可以繼承類,而接口不能。抽象類是一個類,所以在設計時可以使抽象類繼承其它的類,在已有類的基礎上進行設計,但是接口不能繼承類。

否則也可以考慮使用接口實現。



滿足以下條件是最好使用接口:
a)子類已經繼承了其它父類
b)子類中不存在完全相同的功能實現方法
c)子類中不存在相同的屬性
d)設計出的結構不需要繼承其它類
當需要滿足a條件時,只能使用接口,常把接口用於建 立 類 和 類 之間的一個“協議”。否則也可以考慮使用抽象類實現。

 

 

 

總結


免責聲明!

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



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