1. 程式人生 > >java基礎 抽象類與接口

java基礎 抽象類與接口

重要 自身 接口 多繼承 bst 文件 其他 ron 不同

抽象類:

  在面向對象的領域一切都是對象,所有的對象都是通過類來描述的。如果我們要定義的一個類沒有足夠的信息來描述一個具體的對象,還需要其他的具體類來支持,這個時候我們可以考慮使用抽象類。在類定義的前面增加abstract關鍵字,就表明一個類是抽象類。

  抽象類除了不能實例化對象之外,類的其它功能依然存在,成員變量、成員方法和構造方法的訪問方式和普通類一樣。由於抽象類不能實例化對象,所以抽象類必須被繼承,才能被使用

  abstract關鍵字同樣可以用來聲明抽象方法,抽象方法只包含一個方法名,而沒有方法體。抽象方法沒有定義,方法名後面直接跟一個分號,而不是花括號。聲明抽象方法會帶來以下兩個結果:

  • 如果一個類包含抽象方法,那麽該類必須是抽象類。
  • 任何子類必須重寫父類的抽象方法,否則就必須聲明自身為抽象類

  一般情況下,我們將一個類聲明為abstract的,是因為它包含了沒有具體實現的抽象方法。

接口定義:  

  與抽象類類似的一個重要概念是接口。接口(Interface)是一組抽象方法的集合。接口中定義的方法沒有方法體,它們以分號結束。

  接口也和抽象類一樣,無法被實例化,但是可以被實現。一個實現接口的類,必須實現接口內所描述的所有方法,否則就必須聲明為抽象類。編寫接口和編寫類的方式是大體上是類似的,一個接口可以有多個方法,代碼保存在以接口命名且以.java結尾的文件中。接口使用interface

關鍵字進行定義。

  接口訪問權限有兩種:public權限和默認權限,如果接口的訪問權限是public的話,所有的方法和變量都是public。默認權限則同一個包內的類可以訪問。

相同點:

  • 都不能被實例化
  • 都包含抽象方法,這些抽象方法用於描述系統能提供哪些服務,而這些服務是由子類來提供實現的
  • 在系統設計上,兩者都代表系統的抽象層,當一個系統使用一棵繼承樹上的類時,應該盡量把引用變量聲明為繼承樹的上層抽象類型,這樣可以提高兩個系統之間的松耦合

不同點:

  • 在抽象類中可以為部分方法提供默認的實現,從而避免在子類中重復實現它們;但是抽象類不支持多繼承。接口不能提供任何方法的實現,但是支持多繼承。
  • 接口代表了接口定義者和接口實現者的一種契約;而抽象類和具體類一般而言是一種is-a的關系,即兩者在概念本質上是不同的。

java基礎 抽象類與接口