天天看點

Java面向對象之繼承、多态(重寫方法、abstract、final)

一、繼承的優點和實作方法

   1. 文法:修飾符 子類名 extends 父類{    }

    若修飾符是public,則該類在整個項目中可見;若無public修飾符,則該類隻在該包可見。

    在定義一個類時,沒有使用extends關鍵字,那麼這個類直接繼承Object類,

所有對象都繼承這個類的方法。

   2.繼承的内容

        2.1繼承public和protected修飾的屬性和方法,無論子類和父類是否在同一個包中。

        2.2繼承預設權限的屬性和方法,但是,子類和父類必須在同一個包中。

        2.3無法繼承private中的屬性和方法。

        2.4無法繼承父類的構造方法。

   3.子類重寫父類方法

       在子類中根據需求對父類繼承的方法進行重寫,稱為方法的重寫或方法的覆寫。

       3.1重寫的前提是:當從父類繼承的方法中不能滿足子類的需求,則在子類中可以對父類的同名方法進行重寫(調用會覆寫父類的同名方法)。

        3.2方法重寫必須滿足的條件

        1.重寫方法和被重寫的方法必須具有相同的方法名、相同的參數清單。

        2.重寫方法的傳回值類型必須和被重寫方法的傳回值類型相同或是其子類。

        3.重寫方法不能縮小被重寫方法的通路權限。

二、重載和重寫有什麼差別和聯系

    1.重載涉及同一個類中的同名方法,參數清單不同。

    2.重寫涉及的是子類和父類之間的同名方法,參數清單相同,傳回值類型相同。

三、super

    super代表對目前對象的直接父類對象的預設引用。

    如果子類想調用父類被重寫的方法

    1.super必須出現在子類中。

    2.可以通路父類的成員(父類的屬性、方法、構造方法)

    3.super無法通路private。

四、繼承構造方法

   1.java繼承中,執行子類的構造方法之前。如果沒有顯式的super調用,也沒有通過this顯式調用自身的其他構造方法,那麼就是預設調用父類無參。 其目的是為了幫助繼承自父類的成員作初始化操作。      2.首先子類中的方法必須調用父類的構造方法,如果父類中隻有一個有參的構造方法,你在子類的構造方法必須調用,而且是子類的構造方法第一句話必須是調用父類的有參構造方法,否則編譯器會提示錯誤的。如果父類中有無參的構造方法,你沒有寫的話會自動調用的。     3.如果子類的構造方法中通過super顯式調用父類的有參構造方法,則執行父類相應的構造方法,而不執行父類的無參構造。

是以,super();//調用父類的無參構造,隻能在有參構造的第一行。

    4.如果存在多級繼承則會多次向更高一層調用,一直執行到頂級父類Object類的無參構造方法。

    5.Java方法的參數傳遞方式隻有一種:值傳遞,即将實參的副本傳遞給方法,參數本身不發生任何變化。

五、抽象類abstract

    1.抽象類和方法

    有一個方法為抽象方法則該類就改為抽象類。

    抽象類中可以有抽象方法

    抽象方法沒有方法體(大括号也沒有),文法:通路修飾符 傳回值類型 方法名();

    2.abstract

    2.1abstract 可以修飾類和方法,不能修飾屬性和構造方法。

    2.2abstract不能與final、static、private共存。

        原因:1.    final修飾的類和方法不能再次更改,是以不能重寫。

                  2.    static修飾的方法、屬性,随着類的加載而建立,但是abstract是dynamic的,必須通過繼承或接口來實作。

                  3.    private隻能在類内部調用,重寫時通路不到。

六、多态

    1.多态意味着在一次方法調用中是根據包含的對象實際類型,來決定調用哪個方法,不是由存儲對象引用的變量類型決定的。

    為了得到多态的操作,這個方法既要在父類中聲明過,也必須是子類中重寫過的方法。

    2.向上轉型:

    一個父類引用指向子類對象,稱為向上轉型(自動類型轉換)。

    通過父類引用變量調用的方法,是子類重寫後的方法,不是父類方法。

    通過父類引用無法調用子類特有的方法。

    3.向下轉型:

    當向上轉型完成後,無法調用子類特有的方法,如果需要調用子類特有的,可以通過向下轉型實作。