Java中的重載(overloading)和重寫(overriding)都涉及到方法的多態性,但它們在實現方式和目的上有所不同。
重載是指在同一個類中定義多個具有相同名稱但參數類型或數量不同的方法。這些方法可以擁有不同的返回值類型,但不能僅僅通過返回類型來區分方法重載。當調用方法時,編譯器會根據傳入的參數類型、數量和順序來確定調用哪個方法。因此,重載方法的特點是方法名相同,但參數列表不同。
例如,下面的代碼演示了一個添加兩個數的方法add,其中有三個版本的重載方法,每個版本接受不同的參數類型:
pubpc class Calculator {
pubpc int add(int x, int y) {
return x + y;
}
pubpc double add(double x, double y) {
return x + y;
}
pubpc String add(String x, String y) {
return x + " " + y;
}
}
重寫是指子類重新定義其父類中已有的方法,以便更改或擴展其行為。重寫方法必須與父類方法具有相同的方法名,參數列表和返回類型,但可以有不同的實現。重寫方法通常用于實現多態性,當調用該方法時,實際上執行的是子類中的方法,而不是父類中的方法。
例如,下面的代碼演示了一個Animal類以及兩個子類Dog和Cat,其中Dog和Cat都重寫了父類的speak()方法:
pubpc class Animal {
pubpc void speak() {
System.out.println("I am an animal");
}
}
pubpc class Dog extends Animal {
@Override
pubpc void speak() {
System.out.println("Woof!");
}
}
pubpc class Cat extends Animal {
@Override
pubpc void speak() {
System.out.println("Meow!");
}
}
當創建一個Dog或Cat對象并調用speak()方法時,實際上執行的是子類中的方法,而不是父類中的方法。
總的來說,重載和重寫都涉及到方法的多態性,但它們的實現方式和目的有所不同。重載方法通過方法名和參數列表來確定具體調用哪個方法,而重寫方法則是在子類中重新定義其父類中已有的方法以實現多態性。