1. 程式人生 > >Java學習筆記27:類實現介面相關問題

Java學習筆記27:類實現介面相關問題

java中,一個類實現某個介面,必須重寫介面中的所有方法嗎???

不一定,關鍵要看子類是否是抽象類。
如果子類是非抽象類,則必須實現介面中的所有方法;
如果子類是抽象類,則可以不實現介面中的所有方法,因為抽象類中允許有抽象方法的存在!

1、抽象類定義
抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。**通常在程式設計語句中用 abstract 修飾的類是抽象類。**在C++中,含有純虛擬函式的類稱為抽象類,它不能生成物件;**在java中,含有抽象方法的類稱為抽象類,同樣不能生成物件。**抽象類是不完整的,它只能用作基類。在面向物件方法中,抽象類主要用來進行型別隱藏和充當全域性變數的角色。


2、抽象類特點
1)抽象類不能例項化。
2)抽象類可以包含抽象方法和抽象訪問器。
3)不能用 sealed 修飾符修飾抽象類,因為這兩個修飾符的含義是相反的。 採用 sealed 修飾符的類無法繼承,而 abstract 修飾符要求對類進行繼承。
4)從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實際實現。
3、與具體類的比較

1)**抽象類不能直接例項化**,並且對抽象類使用 new 運算子會導致編譯時錯誤。雖然一些變數和值在編譯時的型別可以是抽象的,但是這樣的變數和值必須或者為 null,或者含有對非抽象類的例項的引用(此非抽象類是從抽象類派生的)。
2)允許(但不要求)抽象類包含抽象成員。
3)**抽象類不能被密封**。

4、與介面的比較
1)相同點

    a、不能例項化;
    b、包含未實現的方法宣告;
    c、派生類必須實現未實現的方法,抽象類是抽象方法,介面則是所有成員(不僅是方法包括其他成員)
2)不同點
    a、類可以實現無限個介面,但僅能從一個抽象(或任何其他型別)類繼承,從抽象類派生的類仍可實現介面,從而得出介面是用來解決多重繼承問題的。
    b、抽象類當中可以存在非抽象的方法,可介面不能,且它裡面的方法只是一個宣告必須用public來修飾沒有具體實現的方法。
    c、抽象類中的成員變數可以被不同的修飾符來修飾,可介面中的成員變數預設的都是靜態常量(static final)。
    d、抽象類是物件的抽象,然而介面是一種行為規範。

java 中普通類繼承,抽象類繼承,介面類繼承,子類一定要重寫父類中的方法嗎?

不一定。

  1. 普通類繼承,並非一定要重寫父類方法。
  2. 抽象類繼承,如果子類也是一個抽象類,並不要求一定重寫父類方法。如果子類不是抽象類,則子類一定要實現父類中的抽象方法。
  3. 介面類繼承。如果是一個子介面,可以擴充套件父介面的方法;如果是一個子抽象類,可以部分或全部實現父介面的方法;如果子類不是抽象類,則要求子類一定要實現父介面中定義的所有方法。