Java中有兩種方法,即覆蓋和重載。這些方法允許開發(fā)人員為不同的參數(shù)和返回類型實(shí)現(xiàn)相似的函數(shù),以及使用相同的函數(shù)名和不同的參數(shù)。這樣可以讓代碼更簡(jiǎn)潔,可讀性更高。
重載是一個(gè)類定義多個(gè)同名、但是方法簽名(參數(shù)類型、個(gè)數(shù)、順序)不同的方法。在執(zhí)行時(shí),Java根據(jù)調(diào)用方法時(shí)使用的參數(shù)類型和數(shù)量來確定應(yīng)該調(diào)用哪一個(gè)重載方法。例如:
public class OverloadDemo { public void print(int num) { System.out.println("num = " + num); } public void print(String s) { System.out.println("String = " + s); } public static void main(String[] args) { OverloadDemo demo = new OverloadDemo(); demo.print(5); demo.print("Hello World"); } }
此處輸出結(jié)果為:
num = 5 String = Hello World
覆蓋則是在子類中定義一個(gè)與父類中同名、同參數(shù)列表、同返回類型的方法。當(dāng)調(diào)用該方法時(shí),Java虛擬機(jī)會(huì)優(yōu)先調(diào)用子類的方法。例如:
public class Animal { public void speak() { System.out.println("動(dòng)物在叫"); } } public class Dog extends Animal { public void speak() { System.out.println("汪汪汪"); } } public class Test { public static void main(String[] args) { Animal animal = new Animal(); animal.speak(); Dog dog = new Dog(); dog.speak(); } }
此處輸出結(jié)果為:
動(dòng)物在叫 汪汪汪
在這個(gè)例子中,Dog類覆蓋了Animal類的speak方法。在main方法中,當(dāng)調(diào)用animal.speak()時(shí),輸出“動(dòng)物在叫”,而當(dāng)調(diào)用dog.speak()時(shí),輸出“汪汪汪”。
總之,重載和擴(kuò)展允許Java開發(fā)人員在不同上下文中更有效地使用相同的函數(shù)名和相關(guān)的方法。蓋寫允許更具體的子類定義其自己的實(shí)現(xiàn),覆蓋父類定義。