繼承與多態

抽象類

  1. 使用場景
    1. 當多個類之間有關係並且包含相同功能,但是功能主體不同,可以考慮向上抽取,只抽取功能含義,不抽取功能主體。由於功能主體不知道,故該方法是抽象的,修飾方法爲abstract,包含了抽象方法的類是抽象類,也需要在類上加abstract。
    2. 當不想讓外界創建對象時,也可修飾類爲abstract。
    3. 抽象類的特點
    4. 抽象類不可以創建對象。
    5. 若子類沒有覆蓋抽象類的所有抽象方法,那麼子類也是一個抽象類。
    6. 抽象類可以沒有抽象方法,但包含抽象方法的類一定是抽象類。

接口

  1. 使用場景
    當事物除了包含基本功能外,還有一些擴展功能,可將這些擴展功能抽象到接口中,是對外暴露的規則。
  2. 接口中成員的特點
    1. 變量:默認是常量,被修飾爲public static final。
    2. 方法:默認是抽象方法,被修飾爲public abstract。
  3. 接口在繼承中的特點
    接口可以被子類多實現,因爲接口的方法是抽象的,沒有方法體,子類調用不會產生衝突。
  4. 接口與抽象類的區別
    1. 接口是like a,抽象類是has a,即接口提供擴展功能,是對外暴露的規則,而抽象類提供子類的基本功能。
    2. 當事物之間有內在聯繫時用抽象類,當只是有相同的操作時用接口。
    3. 子類能實現多個接口,但是隻能繼承一個抽象類。
    4. 接口的方法都是抽象的,抽象類可以沒有抽象方法。

覆蓋

  1. 使用場景

    1. 子類繼承抽象類或者實現接口。
    2. 當子類要重新賦予一個方法的含義時。
  2. 覆蓋注意事項

    1. 子類覆蓋父類,子類方法權限必須大於父類。
    2. 靜態只能覆蓋靜態。

多態

  1. 多態的體現:父類引用指向子類對象。
  2. 多態的好處:提高了代碼的擴展性。
  3. 多態的弊端:只能使用父類中的成員。
  4. 多態的前提:多個子類繼承或實現,並且覆蓋。
  5. 多態中成員在編譯時期和運行時期的特點
    1. 成員變量:編譯和運行時期都參考引用
    2. 成員方法:編譯時期參考引用,運行時期參考對象
    3. 靜態成員方法:編譯和運行時期都參考引用
    4. Object類中的equals()和toString()
    5. boolean equals():比較的是引用數據類型的對象地址值,不能比較基礎數據類型,一般進行重寫。
    6. String toString():利用hashCode()返回對象的地址,一般進行重寫。

super

  1. super(屬性):調用父類構造函數
  2. super.屬性:訪問父類同名屬性
  3. super.方法名():訪問父類的成員函數

final

  1. 類:不可以被繼承,彌補了繼承導致破壞封裝性的問題
  2. 屬性:常量,只能賦值一次,一般與static共同修飾
  3. 方法:不可以被覆蓋
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章