聲明方法的存在而不去實現它的類被叫做抽象類別(abstract class),它用於要建立一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能建立abstract 類的執行個體。然而可以建立一個變數,其類型是一個抽象類別,並讓它指向具體子類的一個執行個體。不能有抽象建構函式或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類別為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類別的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象 的,沒有一個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實作類別不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程式體給予)所有這種介面的方法。 然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類別,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到 介面類型或從介面類型轉換,instanceof 運算子可以用來決定某對象的類是否實現了介面。
一: abstract 修飾符 抽象類別
abstract修飾符用來修飾類和成員方法
1: 用abstract修飾的類表示抽象類別,抽象類別位於繼承樹的抽象層,抽象類別不能被執行個體化。
2:用abstract修飾的方法表示抽象方法,抽象方法沒有方法體。抽象方法用來描述系統具有什麼功能,但 不提供具體的實現。
abstract 規則:
1: 抽象類別可以沒有抽象方法,但是有抽象方法的類必須定義為抽象類別,如果一個子類繼承一個抽象類別,子類沒有實現父類的所有抽象方法,那麼子類也要定義為抽象類別,否則的話編譯會出錯的。
2:抽象類別沒有構造方法,也沒有抽象靜態方法。但是可以有非抽象的構造方法
3:抽象類別不能被執行個體化,但是可以建立一個引用變數,類型是一個抽象類別,並讓它引用非抽象類別的子類的一個執行個體
4: 不能用final 修飾符修飾
二: Interface 介面
Interface關鍵字定義介面,也稱為介面類型,用於明確的描述系統對外提供哦的所有服務,清晰的把系統的實現細節與分離,實現傳說中的解耦合。
Interface規則:
1: 介面的成員變數都是public static final類型的,必須顯示初始化
2: 介面的成員方法都是public abstract 類型的
3: 介面只能包含public static final類型的成員變數和public abstract類型的成員方法
4:介面中沒有構造方法,不能執行個體化,同abstract一樣,可以定義一個引用變數,讓實現了Interface的具體類來構造。
5:實現了一個介面,必須實現介面所有的抽象方法,除非該類定義為抽象類別
6:可以實現多個介面,用JAVA語言實現多繼承。
三: abstract 和Interface 的區別
1: 都代表系統的抽象層
2: 都不能被執行個體化,但都可以繼承或者實現抽象類別或者介面的具體類,通過定義引用變數來構造。
3:都包含抽象方法
4: 抽象類別中可以為部分方法提供預設的實現,可以避免子類中重複實現它們,提高代碼的可重用性,介面中只能包含抽象方法。
5:一個類只能繼承一個直接的父類,比如抽象類別,但是可以實現多個介面