方法重載:同一個類中,方法名相同,參數列表不同的2個或多個方法構成方法的重載。
方法覆蓋:子類重新實現了父類中的方法。
1.方法的重載實例(Overload)
指我們可以定義一些名稱相同的方法,通過定義不同的輸入參數來區分這些方法,
然后再調用時,VM就會根據不同的參數樣式,來選擇合適的方法執行
/** * 方法重載滿足的條件 * 1.同一個類中,方法名相同,參數列表不同的2個或多個方法構成方法的重載 * 2.參數列表不同指參數的類型,參數的個數,參數的順序至少一項不同 * 3.方法的返回值類型,方法的修飾符可以不同。 */ public class Overload{ public static void overLoad(int i){ System.out.println(i); } /* 下面方法都與第一個方法public static void overLoad(int i)相比較*/ //public int overLoad(int k){}//錯誤,參數列表相同 //返回值類型不相同 public int overLoad(int i,int k){ return 0; } //修飾符不同 private void overLoad(double d){ } //修飾符,返回值類型都不同 private double overLoad(double d,int k){ return 0; } }
2.方法的覆蓋實例(Override)
重寫Override表示子類中的方法可以與父類中的某個方法的名稱和參數完全相同,
通過子類創建的實例對象調用這個方法時,將調用子類中的定義方法,這相當於把父類
中定義的那個完全相同的方法給覆蓋了,這也是面向對象編程的多態性的一種表現。
/** * 方法覆蓋指子類重新實現了父類中的方法 * 方法覆蓋約束條件: * 1.子類的方法名稱,參數列表,返回值類型必須與父類中方法的名稱,參數列表,返回值類型一致 * 2.子類方法不能縮小父類方法的訪問權限,但可以擴大 * 3.子類方法不能拋出比父類方法更多的異常,可以不拋出異常 */ public class Override{ } class Exception1 extends Exception{} class Exception2 extends Exception1{} class Exception3 extends Exception2{} class Parent{ void method() throws Exception2{} } class Son extends Parent{ //private void method(){}//錯誤,縮小了父類方法的訪問權限 //int method(){} //錯誤,方法返回值與父類方法不一致 void method(int k){} //通過編譯,但不與父類的方法method()構成覆蓋 //public void method() throws Exception1{}//錯誤 拋出比父類更多的異常 //public void method(){} //正確 擴大父類方法的訪問權限,不拋出異常 //void method() throws Exception3{}; //正確 拋出的異常比父類拋出的異常小 public void method() throws Exception3{} }