標籤:成員方法 父類 增加 java基礎 其他 而不是 子類 成員變數 多個
抽象類別:
在物件導向的領域一切都是對象,所有的對象都是通過類來描述的。如果我們要定義的一個類沒有足夠的資訊來描述一個具體的對象,還需要其他的具體類來支援,這個時候我們可以考慮使用抽象類別。在類定義的前面增加abstract關鍵字,就表明一個類是抽象類別。
抽象類別除了不能執行個體化對象之外,類的其它功能依然存在,成員變數、成員方法和構造方法的訪問方式和普通類一樣。由於抽象類別不能執行個體化對象,所以抽象類別必須被繼承,才能被使用。
abstract關鍵字同樣可以用來聲明抽象方法,抽象方法只包含一個方法名,而沒有方法體。抽象方法沒有定義,方法名後面直接跟一個分號,而不是花括弧。聲明抽象方法會帶來以下兩個結果:
- 如果一個類包含抽象方法,那麼該類必須是抽象類別。
- 任何子類必須重寫父類的抽象方法,否則就必須聲明自身為抽象類別
一般情況下,我們將一個類聲明為abstract的,是因為它包含了沒有具體實現的抽象方法。
介面定義:
與抽象類別類似的一個重要概念是介面。介面(Interface)是一組抽象方法的集合。介面中定義的方法沒有方法體,它們以分號結束。
介面也和抽象類別一樣,無法被執行個體化,但是可以被實現。一個實現介面的類,必須實現介面內所描述的所有方法,否則就必須聲明為抽象類別。編寫介面和編寫類的方式是大體上是類似的,一個介面可以有多個方法,代碼儲存在以介面命名且以.java結尾的檔案中。介面使用interface關鍵字進行定義。
介面存取權限有兩種:public許可權和預設許可權,如果介面的存取權限是public的話,所有的方法和變數都是public。預設許可權則同一個包內的類可以訪問。
相同點:
- 都不能被執行個體化
- 都包含抽象方法,這些抽象方法用於描述系統能提供哪些服務,而這些服務是由子類來提供實現的
- 在系統設計上,兩者都代表系統的抽象層,當一個系統使用一棵繼承樹上的類時,應該盡量把引用變數聲明為繼承樹的上層抽象類別型,這樣可以提高兩個系統之間的松耦合
不同點:
- 在抽象類別中可以為部分方法提供預設的實現,從而避免在子類中重複實現它們;但是抽象類別不支援多繼承。介面不能提供任何方法的實現,但是支援多繼承。
- 介面代表了介面定義者和介面實現者的一種契約;而抽象類別和具體類一般而言是一種is-a的關係,即兩者在概念本質上是不同的。
java基礎 抽象類別與介面