Java是一種面向?qū)ο蟮木幊陶Z言,面向?qū)ο蟮娜筇匦允欠庋b、繼承和多態(tài)。其中多態(tài)就是在不同的上下文中,同一個方法可以表現(xiàn)出不同的行為。Java實現(xiàn)多態(tài)的方式有兩種,分別是重載(overload)和重寫(override)。
重載是指在同一個類里面可以定義方法名相同但是參數(shù)列表不同的方法。使用重載可以在不同的情形下使用同名的方法,這樣可以簡化代碼,使代碼更加清晰。下面是一個簡單的例子:
public class Calculate { public int sum(int a, int b) { return a + b; } public double sum(double a, double b) { return a + b; } }
上面的例子中定義了兩個方法,一個用于計算兩個整數(shù)的和,另一個用于計算兩個小數(shù)的和。因為方法名相同但是參數(shù)不同,所以可以在調(diào)用時根據(jù)參數(shù)的數(shù)據(jù)類型來自動選擇調(diào)用哪個方法。比如:
Calculate calculator = new Calculate(); int iResult = calculator.sum(1, 2); double dResult = calculator.sum(1.2, 2.3);
重載的方法是在編譯期間確定的,也就是說編譯器會根據(jù)參數(shù)的類型來選擇最佳的匹配方法。
重寫是指在父類中定義了一個方法,而子類在繼承該父類后可以對這個方法進行重寫。重寫方法的方法名、參數(shù)列表和返回值類型都必須與父類中定義的方法相同。下面是一個例子:
public class Animal { public void speak() { System.out.println("I am an animal."); } } public class Cat extends Animal { public void speak() { System.out.println("I am a cat."); } }
上面的例子中,Animal類定義了一個speak方法,而Cat類繼承了Animal類后重寫了speak方法。在調(diào)用Cat類的speak方法時,會自動調(diào)用重寫后的方法,而不是調(diào)用繼承自父類的方法。
重寫的方法是在運行期間動態(tài)確定的,也就是說在調(diào)用方法時會根據(jù)對象的實際類型來確定最終調(diào)用的方法。