JAVA 基礎知識點複習(七)方法的重載和重寫

這系列博文主要是將自己之前學習的一些java基礎內容進行歸納與總結。

方法

定義:在類中具有特定功能的一段獨立的程序。

組成:訪問修飾符 非訪問修飾符 返回值 方法名 (形參…){ // 方法體 return 返回值}

public static void printName(String name){
	System.out.println(name);
    return;
}

修飾符 :
訪問修飾符(public 、protected、default、private)

非訪問修飾符(static、final、abstract、synchronized)

關鍵字:
void (表明該方法沒有返回值)

return (用於結束方法並將結果返回給調用者)

方法的重載

一個類中出現同名的方法,只要它們的參數個數或者對應位的類型不同,就叫做重載,與返回值類型和修飾符無關

例:

    public String getName(Integer val, String val2){
        return val + val2;
    }

    public String getName(String val2, Integer val){
        return val2 + val;
    }

匹配優先級

    public static void main(String[] args) {
        overload(1);
    }
    
    // (1) 精確匹配
    public static void overload(int param){
        System.out.println("第一級匹配");
    }
    // (2) 如果是基本數據類型,通過向上轉型匹配
    public static void overload(long param){
        System.out.println("第二級匹配");
    }
    // (3) 通過自動裝箱匹配
    public static void overload(Integer param){
        System.out.println("第三級匹配");
    }
    // (4) 通過向上轉型並裝箱匹配
    public static void overload(Long param){
        System.out.println("第四級匹配");
    }
    // (5) 通過子類向上轉型繼承線路依次匹配
    public static void overload(Object param){
        System.out.println("第五級匹配");
    }
    // (6) 通過可變參數匹配
    public static void overload(Integer ...param){
        System.out.println("第六級匹配");
    }

方法的重寫

當子類中出現和父類一模一樣的方法時,子類對象運行的是子類的方法,這種現象稱之爲重寫

子類重寫父類的方法必須遵從“兩同兩小一大”的規則

兩同:即方法名,形參列表相同

兩小:即子類返回值類型和異常要小於等於父類(這裏的比較是指繼承關係)

一大:子類的訪問修飾符要大於等於父類的訪問修飾符(這裏的比較是指訪問權限)

public class Father {

    protected Number getAge(int i) throws Exception{
        return 50;
    }
}

class Son extends Father{
    @Override
    public Integer getAge(int i) throws RuntimeException {
        return 25;
    }
}

被static、final、private修飾的成員不能被重寫

靜態方法不具備多態性,如果子類有和父類一樣的靜態方法,只是把父類的方法隱藏了並不是重寫

public static void main(String[] args) {
        Father f = new Son();
        try {
            // 還是執行父類方法,如果是重寫根據多態執行的應該是子類的方法
            System.out.println(f.getAge(0)); // 50
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章