Java中的方法覆蓋和重載是兩個非常重要的概念,它們都涉及到方法的多態(tài)性,但它們的實現方式和應用場景有所不同。
方法覆蓋(Override)指的是在子類中定義一個與父類中同名、同參數列表的方法,這個子類方法會覆蓋掉父類中的方法。在方法調用時,實際上是調用了子類中的方法,而不是父類中的方法。
public class Animal { public void eat() { System.out.println("Animal is eating."); } } public class Cat extends Animal { public void eat() { System.out.println("Cat is eating."); } }
在上面的例子中,Cat類繼承自Animal類,并覆蓋了父類中的eat()方法。當我們在實例化一個Cat對象并調用eat()方法時,實際上調用的是子類中的eat()方法,輸出的結果是"Cat is eating."
方法重載(Overload)指的是在同一個類中定義兩個及以上同名的方法,但其參數列表不同。Java編譯器會根據不同的實參類型和數量來判斷調用哪個方法,從而實現方法的多態(tài)性。
public class Calculator { public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } }
在上面的例子中,Calculator類中定義了兩個同名的方法add(),一個參數列表是兩個int類型的整數,另一個參數列表是兩個double類型的浮點數。在實例化一個Calculator對象并調用add()方法時,Java編譯器會根據不同的實參類型自動判斷應該調用哪個方法。
綜上所述,雖然Java中的方法覆蓋和重載都涉及到方法的多態(tài)性,但是覆蓋是通過子類繼承父類來實現的,而重載是在同一個類中定義的,并且其參數列表不同。好的程序員應該在應用時結合實際需求,恰當地使用方法覆蓋和重載,從而提高代碼復用和可讀性。