java多態的2種表現形式 方法重載和方法覆蓋



方法重載:同一個類中,方法名相同,參數列表不同的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{}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM