方法重載和方法覆蓋的相同點:
- 都要求方法名相同;
- 都可以用於抽象方法和非抽象方法之間。
方法重載和方法覆蓋的不同點:
- 方法覆蓋要求參數簽名必須一致,而方法重載則要求參數簽名必須不一致;
- 方法覆蓋要求返回類型必須一致,而方法重載對此不做限制;
- 方法覆蓋只能用於子類覆蓋父類的方法,方法重載用於同一個類的所有方法(包括從父類中繼承來的方法);
- 方法覆蓋對方法的訪問權限和拋出的異常有特殊的要求,而方法重載在這方面沒有任何限制;
- 父類的一個方法只能被子類覆蓋一次,而一個方法在所在的類中可以被重載多次。
示例如下:
1 public class Base { 2 protected void method(int v) {} 3 private void method(String s) {} //重載 4 }
1 public abstract class Sub extends Base { 2 public void method(int v) {} //覆蓋 3 public int method(int v1, int v2) {return 0;} //重載 4 protected void method(String s) throws Exception{} //重載 5 abstract void method(); //重載 6 }