繼承:突出的特點

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接口同時必須實作所有方法,匿名類隻在裡面用一次就結束了。隻需要傳入一個對象。繼承、接口和抽象類