類的多態是面向對象編程的三大特性之一,與封裝和繼承并列。多態性允許我們將父對象設置為與其子對象相等的技術,讓我們可以把一個子對象當作父對象對待。在Java中,多態主要體現在以下三個方面:
- 方法的重載(Overloading):在同一個類中,可以定義多個名稱相同但參數列表不同的方法。
- 方法的覆蓋(Overriding):在子類中定義一個與父類中同名、同參數列表的方法,以覆蓋父類中的方法。
- 父類引用指向子類對象:這是多態性最典型的表現。父類類型的引用可以指向子類對象,并且調用子類對象的方法。
下面是一個簡單的Java樣例代碼,展示了多態性的實現:
// 父類
class Animal {void makeSound() {System.out.println("The animal makes a sound");}
}// 子類1
class Dog extends Animal {@Overridevoid makeSound() {System.out.println("The dog barks");}
}// 子類2
class Cat extends Animal {@Overridevoid makeSound() {System.out.println("The cat meows");}
}// 主類
public class PolymorphismDemo {public static void main(String[] args) {Animal a1 = new Animal(); // 父類對象Animal a2 = new Dog(); // 子類Dog對象,但使用父類引用Animal a3 = new Cat(); // 子類Cat對象,但使用父類引用a1.makeSound(); // 輸出:The animal makes a sounda2.makeSound(); // 輸出:The dog barks,多態性體現a3.makeSound(); // 輸出:The cat meows,多態性體現}
}
在上面的例子中,我們定義了一個Animal
父類和兩個子類Dog
和Cat
。每個類都有一個makeSound
方法,用于模擬動物發出的聲音。在main
方法中,我們創建了一個父類對象和兩個子類對象,但都是使用父類Animal
的引用來引用它們。當我們調用makeSound
方法時,會根據實際對象的類型(多態性)來執行相應的方法。這就是多態性的一個典型應用。