天天看點

Java - abstract(抽象類)& interface(接口)

Java - abstract(抽象類)& interface(接口)
Java - abstract(抽象類)& interface(接口)

Ps:抽象類:如果這個方法是抽象的,那麼子類必須重寫。除非子類也是一個抽象類。

參數 抽象類 接口
預設方法實作 它可以有方法實作 接口完全是抽象的。它根本不存在方法的實作
構造器 抽象類可以有構造器 接口不能有構造器
與正常Java類的差別 除了你不能執行個體化抽象類之外,它和普通Java類沒有任何差別 接口是完全不同的類型
通路修飾符 抽象方法可以有public、protected和default這些修飾符 接口方法預設修飾符是public。你不可以使用其它修飾符。
main方法 抽象方法可以有main方法并且我們可以運作它 接口沒有main方法,是以我們不能運作它。
多繼承 抽象方法可以繼承一個類和實作多個接口 接口可以繼承一個或多個其它接口
速度 它比接口速度要快 接口是稍微有點慢的,因為它需要時間去尋找在類中實作的方法。
添加新方法 如果你往抽象類中添加新的方法,你可以給它提供預設的實作。是以你不需要改變你現在的代碼 如果你往接口中添加方法,那麼你必須改變實作該接口的類

選擇使用接口和抽象類的依據是什麼?

接口和抽象類的概念不一樣。接口是對動作的抽象,抽象類是對根源的抽象。

  • 抽象類表示的是:這個對象是什麼。
  • 接口表示的是:這個對象能做什麼。

比如1:

男人,女人,這兩個類(如果是類的話……),他們的抽象類是人。說明,他們都是人。

比如2:

人可以吃東西,狗也可以吃東西,你可以把“吃東西”定義成一個接口,然後讓這些類去實作它。

  1. 接口是抽象類的變體,接口中所有的方法都是抽象的。而抽象類是聲明方法的存在而不去實作它的類。
  2. 接口可以多繼承,抽象類不行。
  3. 接口定義方法,不能實作,而抽象類可以實作部分方法。
  4. 接口中基本資料類型為 static 而抽類象不是的。

 是以,在進階語言上,一個類隻能繼承一個類(抽象類)(正如人不可能同時是生物和非生物),但是可以實作多個接口(吃飯接口、走路接口)。

是以,當你關注一個事物的本質的時候,用抽象類;當你關注一個操作的時候,用接口。

抽象類的功能要遠超過接口,但是,定義抽象類的代價高。因為進階語言來說(從實際設計上來說也是)每個類隻能繼承一個類。在這個類中,你必須繼承或編寫出其所有子類的所有共性。雖然接口在功能上會弱化許多,但是它隻是針對一個動作的描述。而且你可以在一個類中同時實作多個接口。在設計階段會降低難度的。

Java類之間并不允許多繼承,隻可以單繼承和實作多接口。一直以為接口也是,但是發現了下面這個(接口繼承多接口) 

  • 一個類隻能 extends 一個父類,但可以 implements 多個接口。
  • 一個接口則可以同時 extends 多個接口,卻不能 implements 任何接口。
  • Java中的接口是支援多繼承的。