方法簽名
方法簽名是指方法的參數類型,順序和個數.不包含方法名稱.java
重載
重載必須知足如下條件code
- 方法名 相同
- 方法的參數類型,個數和順序至少一項不一樣
- 方法的返回類型能夠不一樣
- 方法的訪問權限修飾符能夠不一樣
覆蓋
若是在子類中定義的一個方法,其名稱,返回類型及參數簽名正好與父類中某個方法的名稱、返回類型及參數簽名相匹配,那麼子類覆蓋了父類的方法。
覆蓋必須知足如下條件:繼承
- 子類方法的名稱、參數簽名和返回類型必須與父類方法保持一致。
-
子類方法不能縮小父類方法的訪問權限。變量
若是沒有這個限制,會與java語言的多態機制發生衝突。權限
//建立父類型的變量,引用子類的實例
Parent parent = new Child();
//調用的是子類實例的方法,若是子類覆蓋這個方法時,縮小了訪問權限,可能會形成沒法訪問到子類實例的這個方法
parent.method();
- 子類方法不能拋出比父類方法更多的異常.子類方法拋出的異常必須與父類方法拋出的異常相同,或者父類方法拋出的異常類是父類方法拋出異常類的子類.
- 方法覆蓋只存在於子類和父類(包括直接父類和間接父類)之間.在同一個類中方法只能被重載,不能被覆蓋.
- 父類的靜態方法不能被子類覆蓋爲非靜態方法.
- 父類的非靜態方法不能被子類覆蓋爲靜態方法
- 父類的私有方法不能被子類覆蓋
- 父類的非抽象方法能夠被子類覆蓋爲抽象方法
異同
-
相同點引用
-
不一樣點方法
- 方法覆蓋要求參數簽名一致,而方法重載要求參數簽名必須不一致.
- 覆蓋要求返回類型一致,或者子類方法返回類型小於父類方法,重載對此不作限制.
- 覆蓋只能用於子類覆蓋父類的方法,重載用於同一個類的全部方法(包括從父類中繼承而來的方法).
- 覆蓋對方法的訪問權限和拋出異常有要求,重載不作限制.
- 父類的一個方法只能被子類覆蓋一次,而一個方法在所在的類中能夠被重載屢次.