重寫與重載的區別

重載(Overload):編譯時的多態性

指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。
特點:

  • 方法名相同,==參數列表不同==(參數個數,參數類型,參數順序)
  • 返回值類型可以相同可以不同
  • 可以拋出不同的異常

應用:
多用於構造方法的重載

class OverloadTest{
    //重載時參數順序不同也可以,但前提時參數類型不同
    public static void method(String s,int a){
        System.out.println("方法1");
    }
    public static void method(int a,String s){
        System.out.println("方法2");
    }

    //構造方法的重載應用較多
    OverloadTest(int v,String s){
        System.out.println("構造方法1");
    }
    OverloadTest(String s,int v){
        System.out.println("構造方法2");
    }
}

重寫(覆寫,Override):運行時的多態性

當子類繼承父類後,如果想要修改,可以用方法的重寫

特點:

  • 方法名,參數列表相同
  • 返回值類型相同
  • 訪問限定符不可以比父類的被重寫方法的更嚴格,即子類的重寫方法被訪問的範圍與父類相同或者更廣,不可以更窄
  • 不可以拋出新的受查異常或更廣泛的受查異常,可以拋出非受查異常
  • 不可以重寫被final修飾的方法
  • 不可以重寫被static修飾的方法

應用:
子類需要修改繼承自父類的方法時應用

class OverrideTest{
    public void method(){
        System.out.println("父類的方法");
    }
}
class Son extends OverrideTest{
    @Override//子類重寫父類方法時可以加上這個註解,自動幫你校驗重寫格式是否正確
    public  void method(){
        System.out.println("子類重寫的方法");
    }
    public static void methodB(){
        System.out.println("子類的方法");
    }
}

public class OverrideOrOverloadDemo {
    public static void main(String[] args) {
        new OverrideTest().method();
        new Son().method();
        OverrideTest ot = new Son();
//        ot.methodB();//以引用爲準,引用爲OverrideTest,該類中的沒有方法methodB(),因此會報編譯錯誤
        ot.method();//當子類重寫了父類的方法時,調用子類的重寫的方法
    }
}

運行結果:
在這裏插入圖片描述

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