Java-overload重載和override重寫

重載(overload)

  • 在同一個類中,方法名相同,參數列表不同(參數個數,參數順序,參數類型)

  • 僅僅返回類型不同不足以稱爲方法的重載(重載與方法返回類型無關)

  • 僅僅參數變量名稱不同是不可以的

public class OverloadDemo {
    /**
     * 方法的重載 overload
     *
     * 方法名相同,參數列表不同(參數個數不同,參數類型不同,參數順序不同)
     * 注意:與方法返回類型無關,與修飾符無關
     */

    public int sum(int a, int b){
        return a + b;
    }
    // 方法名相同,參數類型不同,構成重載,與返回值類型無關
    public float sum(float a, float b){
        return (int)(a + b);
    }
    // 方法名相同,參數數量不同,構成重載,與返回值類型無關
    public int sum(int a, int b, int c){
        return a + b + c;
    }

    public void print(String str, int year){
        System.out.println("先是String,後是Integer");
    }
    // 方法名相同,參數順序不同,構成重載,與返回值類型無關
    public void print(int year, String str){
        System.out.println("先是Integer,後是String");
    }
}

重寫(override)

  • 子類繼承父類,方法名相同,參數列表相同,權限修飾符作用範圍要大於父類的範圍

  • 父類用public修飾的方法被重寫,子類中方法的修飾符只能是public

  • 靜態方法不能被重寫

  • final修飾的方法不能被重寫

public class OverrideDemo {
    /**
     * 方法的重寫 overwrite
     *
     * 重寫是 方法名相同,返回值相同,參數列表相同(參數個數相同,參數順序相同,參數類型相同)
     *       方法的內容不同(方法內部的代碼不同,也可以相同)
     */

    class Father{
        public void run(){
            System.out.println("Father run");
        }
        public void eat(){
            System.out.println("Father eat");
        }
    }

    class Son extends Father{
        // 子類Son繼承Father,返回類型、參數列表、方法名都和父類相同,重寫了方法run()
        public void run(){
            System.out.println("Son run");
        }
        // 子類Son繼承Father,返回類型、參數列表、方法名都和父類相同,重寫了方法eat()
        public void eat(){
            System.out.println("Son eat");
        }
    }
}

總結

重寫和重載不同點:

  • 重寫發生必須要有繼承關係;重載在同一類中發生。
  • 重寫要求子類方法返回類型、方法名、參數列表與父類中方法相同;重寫要求方法名、參數列表不同,與返回值無關

重寫和重載相同點:

  • 都要求方法名通相同
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章