java 基礎知識——04


1.

Java抽象類、接口、內部類和泛型

    1.
      抽象類除了包含抽象方法外,還可以包含具體的變量和具體的方法。類即使不包含抽象方法,也可以被聲明爲抽象類,防止被實例化。

  

    關於抽象類的幾點說明:

  • 抽象類不能直接使用,必須用子類去實現抽象類,然後使用其子類的實例。然而可以創建一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例,也就是可以使用抽象類來充當形參,實際實現類作爲實參,也就是多態的應用。
  • 不能有抽象構造方法或抽象靜態方法。 

在下列情況下,一個類將成爲抽象類:
  1. 當一個類的一個或多個方法是抽象方法時;
  2. 當類是一個抽象類的子類,並且不能爲任何抽象方法提供任何實現細節或方法主體時;
  3. 當一個類實現一個接口,並且不能爲任何抽象方法提供實現細節或方法主體時;注意:
    • 這裏說的是這些情況下一個類將成爲抽象類,沒有說抽象類一定會有這些情況。
    • 一個典型的錯誤:抽象類一定包含抽象方法。 但是反過來說“包含抽象方法的類一定是抽象類”就是正確的。
    • 事實上,抽象類可以是一個完全正常實現的類
      2..

        注意:接口中聲明的成員變量默認都是 public static final 的,必須顯示的初始化。因而在常量聲明時可以省略這些修飾符。

       *  接口是若干常量和抽象方法的集合,目前看來和抽象類差不多。

      1) 接口中只能定義抽象方法,這些方法默認爲 public abstract 的,因而在聲明方法時可以省略這些修飾符。

      3) 接口中沒有構造方法,不能被實例化。

      4) 一個接口不實現另一個接口,但可以繼承多個其他接口。接口的多繼承特點彌補了類的單繼承。

      *  接口必須通過類來實現(implements)它的抽象方法,然後再實例化類。類實現接口的關鍵字爲implements。

     * 如果一個類不能實現該接口的所有抽象方法,那麼這個類必須被定義爲抽象方法。

    *  不允許創建接口的實例,但允許定義接口類型的引用變量,該變量指向了實現接口的類的實例。

   

     3...

       *  下面說一下抽象類和接口的主要區別。

1) 抽象類可以爲部分方法提供實現,避免了在子類中重複實現這些方法,提高了代碼的可重用性,這是抽象類的優勢;而接口中只能包含抽象方法,不能包含任何實現。

2) 一個類只能繼承一個直接的父類(可能是抽象類),但一個類可以實現多個接口,這個就是接口的優勢。


綜上所述,接口和抽象類各有優缺點,在接口和抽象類的選擇上,必須遵守這樣一個原則:

  • 行爲模型應該總是通過接口而不是抽象類定義,所以通常是優先選用接口,儘量少用抽象類。
  • 選擇抽象類的時候通常是如下情況:需要定義子類的行爲,又要爲子類提供通用的功能。
注意:
  • 泛型是 Java 1.5 的新增特性,它以C++模板爲參照,本質是參數化類型(Parameterized Type)的應用。
  • 類型參數只能用來表示引用類型,不能用來表示基本類型,如  int、double、char 等。但是傳遞基本類型不會報錯,因爲它們會自動裝箱成對應的包裝類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章