Java編程語(yǔ)言中提供了兩種方法來實(shí)現(xiàn)多態(tài)性——重寫和方法重載。
重寫指的是子類重新定義父類中已有的方法,但不改變方法名和參數(shù)列表。重寫方法會(huì)繼承父類中方法的實(shí)現(xiàn),但是子類也可以使用自己的實(shí)現(xiàn)。如果方法在子類中被重寫,則每種數(shù)據(jù)類型都需要提供其特殊的實(shí)現(xiàn),這樣才能實(shí)現(xiàn)多態(tài)性。
public class Animal { public void makeSound() { System.out.println("The animal makes a sound"); } } public class Cat extends Animal { public void makeSound() { System.out.println("The cat purrs"); } } public class Dog extends Animal { public void makeSound() { System.out.println("The dog barks"); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Animal(); Animal myCat = new Cat(); Animal myDog = new Dog(); myAnimal.makeSound(); myCat.makeSound(); myDog.makeSound(); } } output: The animal makes a sound The cat purrs The dog barks
方法重載允許定義一個(gè)方法名相同但參數(shù)類型不同的多個(gè)方法。當(dāng)不同類型的方法調(diào)用時(shí),Java會(huì)自動(dòng)選擇最匹配的方法來執(zhí)行。
public class Math { public int add(int x, int y) { return x + y; } public double add(double x, double y) { return x + y; } } public class Main { public static void main(String[] args) { Math myMath = new Math(); int sumInt = myMath.add(5, 10); double sumDouble = myMath.add(5.5, 10.5); System.out.println("Sum of integers: " + sumInt); System.out.println("Sum of doubles: " + sumDouble); } } output: Sum of integers: 15 Sum of doubles: 16.0
需要注意的是,方法重載要求方法名相同,但參數(shù)類型、個(gè)數(shù)或順序需要不同。當(dāng)參數(shù)類型、個(gè)數(shù)或順序都相同的時(shí)候,重載將無(wú)法實(shí)現(xiàn)。