java:方法覆蓋與方法重載

方法簽名

方法簽名是指方法的參數類型,順序和個數.不包含方法名稱.java

重載

重載必須知足如下條件code

  • 方法名 相同
  • 方法的參數類型,個數和順序至少一項不一樣
  • 方法的返回類型能夠不一樣
  • 方法的訪問權限修飾符能夠不一樣

覆蓋

若是在子類中定義的一個方法,其名稱,返回類型及參數簽名正好與父類中某個方法的名稱、返回類型及參數簽名相匹配,那麼子類覆蓋了父類的方法。
覆蓋必須知足如下條件:繼承

  • 子類方法的名稱、參數簽名和返回類型必須與父類方法保持一致。
  • 子類方法不能縮小父類方法的訪問權限。變量

    若是沒有這個限制,會與java語言的多態機制發生衝突。權限

    //建立父類型的變量,引用子類的實例
      Parent parent = new Child();
      //調用的是子類實例的方法,若是子類覆蓋這個方法時,縮小了訪問權限,可能會形成沒法訪問到子類實例的這個方法
      parent.method();
  • 子類方法不能拋出比父類方法更多的異常.子類方法拋出的異常必須與父類方法拋出的異常相同,或者父類方法拋出的異常類是父類方法拋出異常類的子類.
  • 方法覆蓋只存在於子類和父類(包括直接父類和間接父類)之間.在同一個類中方法只能被重載,不能被覆蓋.
  • 父類的靜態方法不能被子類覆蓋爲非靜態方法.
  • 父類的非靜態方法不能被子類覆蓋爲靜態方法
  • 父類的私有方法不能被子類覆蓋
  • 父類的非抽象方法能夠被子類覆蓋爲抽象方法

異同

  1. 相同點引用

    • 方法名要保持一致
  2. 不一樣點方法

    • 方法覆蓋要求參數簽名一致,而方法重載要求參數簽名必須不一致.
    • 覆蓋要求返回類型一致,或者子類方法返回類型小於父類方法,重載對此不作限制.
    • 覆蓋只能用於子類覆蓋父類的方法,重載用於同一個類的全部方法(包括從父類中繼承而來的方法).
    • 覆蓋對方法的訪問權限和拋出異常有要求,重載不作限制.
    • 父類的一個方法只能被子類覆蓋一次,而一個方法在所在的類中能夠被重載屢次.
相關文章
相關標籤/搜索