Java是一門面向?qū)ο蟮木幊陶Z言,其中有兩個重要的概念:重寫(Override)和重載(Overload)。雖然它們在語法上很相似,但是它們的含義和作用是不同的。
重寫是指子類重新定義父類中已有的方法,使方法的調(diào)用符合子類對象的特征。即子類通過繼承父類,重新實現(xiàn)一個同名、同參數(shù)的方法。其中,重寫的方法必須和被重寫的方法的簽名一模一樣,即方法名和參數(shù)列表必須一致,返回值和訪問修飾符可以和被重寫的方法不同。這樣,當子類對象調(diào)用該方法時,就會執(zhí)行子類中的方法,而不再是執(zhí)行父類中的方法。
class Animal { public void eat() { System.out.println("Animal eats."); } } class Cat extends Animal { // override the eat() method public void eat() { System.out.println("Cat eats fish."); } } public class Main { public static void main(String[] args) { Animal a = new Animal(); // Animal object a.eat(); // output: Animal eats. Cat c = new Cat(); // Cat object c.eat(); // output: Cat eats fish. } }
重載是指在同一個類中,方法名相同但參數(shù)列表不同,就稱為方法的重載。即同一個類中可以定義多個同名但入?yún)⒉煌姆椒ǎ瑏韺崿F(xiàn)不同的功能。在重載時,同樣的方法名、不同的參數(shù)組成了方法的簽名,編譯器會根據(jù)傳入的參數(shù)類型和數(shù)量的不同,自動匹配到對應的方法進行調(diào)用。
class Calculator { public int add(int a, int b) { return a + b; } public int add(int a, int b, int c) { return a + b + c; } } public class Main { public static void main(String[] args) { Calculator c = new Calculator(); System.out.println(c.add(1, 2)); // output: 3 System.out.println(c.add(1, 2, 3)); // output: 6 } }
總結來說,重寫是子類重新實現(xiàn)一個與父類同簽名的方法,重載是同一個類中有多個同名但入?yún)⒉煌姆椒ǎ糜趯崿F(xiàn)方法的多態(tài)。了解這兩個概念的區(qū)別,有助于編寫更加規(guī)范、易讀的Java程序。