面試的時候經常遇到介面與抽象類的區別,介面與抽象類的不同使用場景等問題,本文今天就討論這些問題。
1.我對抽象類和介面的理解
介面與抽象類的不同的典型回答如下:
當然以上是久經沙場考驗的答案, 如果是面試中可以這麼回答,但是對於抽象類和介面的區別我還想從另乙個方面來談談它們的差異,從對事物的抽象層級上來說,介面更加徹底。對於行為的抽象使用抽象類也可以完成相同的功能。那還需要介面幹嘛呢?在很多實際的場景下,抽象行為是不能給出任何具體的實現,只能有乙個規範,舉例來說動物的吃這個行為我們就只能給乙個規範,因為各種各樣的動物吃的行為都是不一樣的。這種場景下我們就需要使用介面。而抽象類中的普通方法可以有自己的實現,所以它的抽象層級較介面要低一些。
2.介面與抽象類的語法區別引數
抽象類介面
預設的方法實現
可以有預設的方法實現,由於抽象類中可以有非抽象方法,因此在非抽象方法中可以有預設的實現
介面完全是抽象的。不能有方法的實現
實現子類使用extends關鍵字來繼承抽象類。如果子類不是抽象類的話,它需要提供抽象類中所有抽象方法的實現。
子類使用關鍵字implements來實現介面。它需要提供介面中所有宣告的方法的實現
構造器抽象類可以有構造器
介面不能有構造器
例項化不能被例項化
不能唄例項化
訪問修飾符
抽象方法可以有public、protected和default這些修飾符
介面方法預設修飾符是public
靜態方法
抽象類可以有靜態方法和靜態**塊
介面不能有靜態方法和靜態**塊
靜態屬性
抽象類的靜態屬性可以自由定義
介面的靜態屬性預設是public static final
成員變數
抽象類可以有成員變數
介面沒有成員變數
main方法
抽象方法可以有main方法並且可以執行
沒有main方法
多繼承只能單繼承
支援乙個類實現多個介面
速度它比介面速度要快
介面是稍微有點慢的,因為它需要時間去尋找在類中實現的方法。
3.介面和抽象類的使用場景
java抽象類與介面的區別抽象類與介面的特性是什麼
介面和抽象類的概念不一樣。介面是對動作的抽象,抽象類是對根源的抽象。抽象類表示的是個物件,什麼物件。介面表示的是物件的功能,能做什麼。舉個例子 男人 物件 和女人 物件 這兩個類 物件 他們可以抽象為人。公貓和母貓可以抽象為貓。人可以吃飯,可以睡覺,貓呢也可以吃飯和睡覺,那麼這個 吃飯 睡覺 就是某...
抽象類與介面的區別
c 中可以多繼承介面,卻只能繼承自乙個抽象類 抽象類中的方法可以包含一些實現,但介面卻只能定義方法的一種規範,不能包含實現 繼承類必須實現藉口中所有的方法,而不一定要實現抽象類中的所有方法 抽象類可以繼承自抽象類 但介面不能繼承自介面 派生類必須實現未實現的方法,抽象類是抽象方法,介面則是所有成員 ...
抽象類與介面的區別
c 中可以多繼承介面,卻只能繼承自乙個抽象類 抽象類中的方法可以包含一些實現,但介面卻只能定義方法的一種規範,不能包含實現 繼承類必須實現藉口中所有的方法,而不一定要實現抽象類中的所有方法 抽象類可以繼承自抽象類 但介面不能繼承自介面 派生類必須實現未實現的方法,抽象類是抽象方法,介面則是所有成員 ...