天天看點

繼承、接口和抽象類

繼承:突出的特點

繼承、接口和抽象類

extends關鍵字

對象有很多,有共同點,可以分成若幹類别,共同點提取出來,形成父類,其他類成為子類。

子類也會繼承父類的父類的所有屬性和方法(但不能直接通路private成員)

子類有相同方法時,會優先調用自己的。

單根繼承原則:每個類隻能繼承一個類 不寫extends,預設繼承Java.lang.object類。

預設類有。。。

構造函數 :子類構造函數第一句話預設調用父類的無參數構造函數super(),除非子類構造函數第一句話是super,而且super必須放在第一條,不會出現兩條super。

抽象類和接口

  • 抽象類

    類:屬性(0或者多個)+方法(0或者多個)

    完整健康的類:所有方法都有實作。

    可以沒有方法,但是有方法就肯定有實作,才是一個完整的類。

    完整的類才可以被執行個體化,new出來。

    暫時有方法未實作,則被定義為抽象類。

    抽象類關鍵字 abstract 沒有大括号。

    抽象類組成:成員變量,個數不限;具體方法,方法有實作,個數不限;抽象方法加abstract關鍵字,個數不限。

    abstract class A{} //類被定義為抽象的。不能new。

    抽象類也是類,繼承了抽象類就不可以繼承其他類。

    子類繼承抽象類,必須實作所有未實作的方法,才能不是抽象類了。

  • 接口

    如果一個類裡所有方法都沒有實作,那麼這個類就是接口interface。也是.java 編譯出來也是.class

    類隻可以繼承一個類,但是可以實作多個接口,繼承和實作可以同時實作。

    接口不算類,或者說是特殊的類。接口設計彌補單根繼承的不足。單根繼承不夠靈活。

    繼承、接口和抽象類

    類實作接口必須實作所有未實作的方法。如果沒有全部實作,那麼隻能成為抽象類。

    接口可以定義變量,但是一般隻能是常量。

繼承、接口和抽象類

繼承必須放在實作前面。

抽象類可以有private/protected,接口方法都是public。

轉型、多态和契約設計

  • 類轉型
    • 類型可以互相轉型,隻限制于有繼承關系的類。
      • 子類可以轉換成父類,但是父類不可以轉換成子類。
      • 子類繼承父類所有财産,由大變小是可以的,變成父類。但是父類不可以變成子類。
        繼承、接口和抽象類
      • 父類轉為子類有一種情況例外。如果這個父類本身就是子類轉化來的。
      繼承、接口和抽象類
  • 多态
    • 類型轉換帶來的作用就是多态。
    • 子類繼承父類所有方法,但子類可以重新定義一個名字,參數和父類方法一樣的方法,這個行為就是 重寫。(不是重載)。子類的方法替換掉父類的。
    • 子類方法高于父類。
    繼承、接口和抽象類
    • 多态的作用
      • 以統一的接口來操縱某一類中不同的對象的動态行為
      • 對象之間的解耦
        繼承、接口和抽象類
    • 契約設計
    • 契約:規定規範了對象應該包含的行為方法。
    • 接口定義了方法的名稱、參數和傳回值,規範了派生類的行為
    • 基于接口,利用轉型和多态,不影響真正方法的調用,成功将調用類和被調用類解耦
    繼承、接口和抽象類
    new接口同時必須實作所有方法,匿名類隻在裡面用一次就結束了。隻需要傳入一個對象。