Java_Day9(方法的覆蓋,多態)

方法的覆蓋

回憶:方法的重載。
當在同一個類當中,方法完成的功能是相似的,建議方法名相同,這樣方便程序員的編程。

  • 使用的情況:
    1.在同一個類中。
    2.方法名相同
    3.參數列表不同:類型,順序,個數。
    方法的覆蓋:
    方法的覆蓋又被稱爲方法的重寫(overwrite,override)
  • 什麼時候使用方法的覆蓋(重寫)?
    當父類中的方法已經無法滿足子類的需求。
    子類有必要將父類中繼承過來的方法進行重新編寫。這個重新編寫的過程稱爲方法重寫。/方法的覆蓋。
    什麼條件滿足後方法會發生重寫呢?
  • 方法重寫發生在具有繼承關係的父子類之間,返回前類型相同,方法名相同,形參列表相同。(內容不同)
  • 訪問權限不能更低,只能更高。
  • 拋出的異常不能更多,只能更少。
  • 建議複製粘貼。
    注意:
    私有方法不能繼承,所以不能覆蓋。
    構造方法不能繼承,所以不能覆蓋。(構造方法的方法名與類名必須一樣,父子類不能同名,故不能繼承 更不可能被重寫 可以重載-----某些情況對象的初值不同)
    覆蓋只對方法。
    靜態方法不能覆蓋。

多態

  • 幾個概念:
    向上轉型(upcasting):
    子類型–>父類型
    又稱爲:自動類型轉換。
    向下轉型(downcasting):
    父類型–>子類型
    又被稱爲:強制類型轉換。
    但他們都必須有繼承關係。
    多態語法機制:
    Cat 繼承於 Animal。
    Animal a2 = new Cat();子–>父類型,java允許。引用a2爲Animal類型,指向的對象類型爲Cat類型,在運行時還是會以具體的對象Cat運行。
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 父類中沒有子類的方法,可以向下轉型,強制類型轉換。
  • 當調用的方法是子類型中特有的,在父類中不存在,必須進行向下轉型。
    Animal c2 =new Cat ();
    Cat a2 = (Cat)c2;
    Animal a3 = new Bird();
    Cat c3 = (Cat)a3;此種編譯能通過,但無法運行,會發生異常,因爲Bird類和Cat之間無繼承關係。(自定義)

    向上轉型編譯通過,運行一定不會出現問題。
    向下轉型不一定。
  • 怎麼避免出現異常呢?
  • instanceof運算符可以做到。
  • instanceof怎麼用?
    語法格式:
    引用 instanceof 數據類型名。
    其執行結果爲boolean:
    假設:A instanceof Animal
    結果:ture:A 是Animal類型。
    flase:A不是Animal類型。
    if(a3 instanceof Animal){//a3是Animal的對象。
    強制類型轉換。
    }
    多態性,可以增強擴展力,降低耦合度。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章