1、方法重載
- 被重載的方法必須改變參數列表(參數個數或類型或順序不一樣);
- 被重載的方法可以改變返回類型;
- 被重載的方法可以改變訪問修飾符;
- 被重載的方法可以聲明新的或更廣的檢查異常;
- 方法能夠在同一個類中或者在一個子類中被重載。
- 無法以返回值類型作爲重載函數的區分標準。
protected void fun(int a) {
}
protected void fun(int a, int b) {//重載,參數個數不一樣
}
protected void fun(long a) {//重載,參數類型不一樣
}
private void fun(int a, long b) {//重載,參數類型不一樣,修飾符不一樣
}
private void fun(long b, int a) {//重載,參數順序不一樣
}
protected int fun(int a, int b, int c) {//重載,返回值不一樣
return 2;
}
2、方法重寫
- 參數列表必須完全與被重寫方法的相同;
- 返回類型必須完全與被重寫方法的返回類型相同;
- 訪問權限不能比父類中被重寫的方法的訪問權限更低。例如:如果父類的一個方法被聲明爲public,那麼在子類中重寫該方法就不能聲明爲protected
public class ParentClass {
protected void fun(int a, long b) {
}
}
public class SonClass extends ParentClass {
// protected void fun(int a, long b) {//完全一樣是重寫
//
// }
public void fun(int a, long b) {//在子類中的修飾符必須>父類中的修飾符權限
}
}
- 子類的返回值類型必須要小於或者等於父類的返回值類型。
- 父類的成員方法只能被它的子類重寫。
- 聲明爲final的方法不能被重寫。
- 聲明爲static的方法不能被重寫,但是能夠被再次聲明
public class ParentClass {
protected static void fun(int a, long b) {
}
}
總結:
兩同兩小一大原則:
- 兩同:方法名和參數列表相同
- 兩小:返回值或聲明異常比父類小(或相同)
- 一大:訪問修飾符比父類的大(或相同)