天天看點

【JAVA】重載與重寫的含義與差別                                       重載與重寫的含義與差別

                                       重載與重寫的含義與差別

重載與重寫是java多态性的不同表現方式,在程式設計中特别常見。了解兩者的差別,對我們編寫高品質的代碼尤為重要。

一、重載(overload)

重載是指在一個類中定義了多個同名的方法,他們有着不同的參數清單(包括參數類型、參數個數、參數順序等)。

在使用重載時,應該要注意:

(1)參數類型、個數、順序一緻,隻是參數名稱不一緻,不能構成重載。

(2)不能通過方法的通路權限、傳回值類型和抛出的異常類型來決定重載。

代碼示例:

package day0901;

public class TestLR {
    public int getA() {
        return 1;
    }

    public void getA(int a) {
        System.out.println("a:" + a);
    }
}
           

二、重寫(override)

重寫發生在父類與子類之間,子類覆寫父類中的一個方法并對其進行重寫,用以達到不同的作用。

在使用重寫時,應該要注意:

(1)子類中的重寫方法要和父類被重寫方法有相同的傳回值類型、方法名、參數清單和抛出的異常。

(2)子類不能重寫父類中private方法,否則隻是子類定義了一個新方法,不屬于重寫的範疇。

代碼示例:

package day0901;

class Animal {
    public void shout() {
        System.out.println("動物在叫");
    }
}

class Dog extends Animal {
    @Override
    public void shout() {
        System.out.println("小狗:汪汪汪");
    }
}

public class Test {
    public static void main(String args[]) {
        Animal animal = new Dog();
        animal.shout();
        //輸出
        //小狗:汪汪汪
    }
}
           

三、兩者的差別

(1)重載發生在一個類裡,被重載方法與重載方法是垂直關系。而重寫發生在父類與子類中,被重寫方法與重寫方法是水準關系。

(2)具體調用哪一個重載方法是由參數清單來決定的。而具體調用哪一個重寫方法是由調用對象的類型來決定的。

    【1】在編譯時就可以依據參數清單的不同決定調用哪個重載方法,屬于編譯時多态。

    【2】隻有在運作時才能确定調用哪一個重寫方法,屬于運作時多态。

何為運作時多态?

父類的引用變量不僅可以指向父類的執行個體對象(Animal animal=new Animal()),也可以指向子類的執行個體對象(Animal animal=new Dog())。同樣,接口的引用變量也可以指向實作類的執行個體對象。而程式調用的方法在運作期才動态綁定(綁定是指将一個方法調用與方法主體連接配接到一起),就是引用變量所指向的具體執行個體對象所屬類中的方法,也就是記憶體中正在運作的那個執行個體對象的方法,而不是引用變量的類型中定義的方法。