Java之重載(Overload)與重寫(Overwrite)總結


內容來源為:《孫衛琴面向對象編程》,本隨筆簡單總結,具體內容可參見概述第6章,寫的挺清晰;

一. 重載(Overload)

  1. 有時候類的同一種功能有多種實現方式,到底采用哪種實現方式,取決於調用者給定的參數(如構造函數就是一種例子);

  2. 對於類的方法(包括從父類中繼承的方法),如果有兩個方法的方法名相同,但參數不一樣,那么可以說,一個方法是另一個方法的重載方法。

  3. 重載方法必須滿足以下條件

   (1)方法名相同;

   (2)方法的參數類型、個數、順序至少有一項不同;

   (3)方法的返回值類型可以不同;

   (4)方法的修飾符可以不同;

  4. 在一個類中不允許定義兩個方法名相同,並且參數簽名也完全相同的方法。因為假如存在這樣的方法,Java虛擬機在運行時就無法決定到底執行哪個方法,參數簽名是指參數的    類型、個數和順序。

二. 重寫(OverWrite)

  1. 如果在子類中定義的一個方法,其名稱、返回值類型及參數簽名正好與父類中的某個方法的名稱,返回值類型及參數名相匹配,那么可以說,子類的方法重寫了(覆蓋)父類的方法;

  2. 重寫方法必須滿足以下約束條件:

    (1)子類的方法的名稱、參數簽名和返回值類型必須與父類方法的名稱、參數簽名及返回值類型一致;

    (2)子類在重寫父類方法時,重寫方法不能縮小父類方法的訪問權限(原因是和多態機制沖突,詳細內容可看《Java面向對象編程》);

    (3)子類方法不能拋出比父類方法更多的異常;子類方法拋出的異常必須和父類方法拋出的異常相同,或者子類方法拋出的異常是父類方法拋出的異常的子類(原因是和多態機制沖突,詳細內容可看《Java面向對象編程》);

    (4)方法重寫之存在於子類和父類之間(包括直接父類和間接父類),在同一個類中,方法只能重載不能重寫。

    (5)父類的靜態方法不能被子類重寫為非靜態方法;

    (6)子類可以定義與父類的靜態方法同名的靜態方法,以便在子類中隱藏父類中的靜態方法;

    (7)父類的非靜態方法不能被子類重寫為靜態方法;

    (8)父類中的私有方法不能被子類重寫;原因:子類方法重寫父類方法的前提是,子類必須能繼承父類的特定方法,因此父類中的私有方法不能被子類繼承,也就無法構成重寫,即使在形式上符合重寫的規范,也不能算得上重寫;

    (9)父類的抽象方法可以被子類通過兩種方式重寫,一是實現父類的抽象方法,二是重新聲明父類的抽象方法。

    (10)父類的非抽象方法可以被重寫為抽象方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM