在Java中,多態(polymorphism)是面向對象編程的一個重要概念,它允許你使用一個通用的接口來表示不同的對象和操作這些對象,而不必關心具體的對象類型。多態性有兩種主要形式:編譯時多態(靜態多態)和運行時多態(動態多態)。
-
編譯時多態(靜態多態):
- 方法重載是一種編譯時多態的形式。在同一個類中,你可以定義多個方法,它們具有相同的名稱但不同的參數列表。編譯器會根據方法調用時提供的參數類型來決定使用哪個方法。
public class Example {public void doSomething(int x) {// do something with int}public void doSomething(String str) {// do something with String} }
在上面的例子中,
doSomething
方法在編譯時會根據傳遞的參數類型選擇合適的版本。 -
運行時多態(動態多態):
- 運行時多態是通過繼承和接口實現的。它使得可以使用父類類型的引用來引用子類對象,而且可以在運行時動態地確定調用的方法。這是通過Java中的方法重寫(override)和抽象類、接口實現來實現的。
class Animal {public void makeSound() {System.out.println("Animal makes a sound");} }class Dog extends Animal {public void makeSound() {System.out.println("Dog barks");} }class Cat extends Animal {public void makeSound() {System.out.println("Cat meows");} }
使用動態多態:
Animal dog = new Dog(); Animal cat = new Cat();dog.makeSound(); // 輸出: Dog barks cat.makeSound(); // 輸出: Cat meows
在上面的例子中,
dog
和cat
是Animal
類型的引用,但它們指向了實際的Dog
和Cat
對象。在運行時,Java 會動態地調用相應子類的方法。
多態性有助于提高代碼的可維護性和擴展性,因為你可以通過引用父類類型的對象來調用子類的方法,而無需了解實際的子類類型。