在Java中,多態是面向對象編程中的一個重要概念。它可以讓同一個行為在不同的對象中表現出不同的表現方式。Java中的多態可以通過繼承和接口實現。Java中的多態機制可以晚綁定和早綁定。
早綁定是指在編譯時就已經完成了所有的變量、方法和類的綁定,這被稱為靜態綁定。所以,早綁定不能轉換由對象類型決定的方法調用。舉個例子,我們定義了一個父類和一個子類,例如:
class Animal { public void sound() { System.out.println("Animal is making sound."); } } class Dog extends Animal { public void sound() { System.out.println("Dog is barking."); } }
當我們創建了一個Dog對象并調用sound方法時,Java會在編譯時期確定調用哪個方法,因為Dog.sound()方法覆蓋了父類的sound()方法,因此Dog.sound()方法會被調用。這就是早綁定的例子。
晚綁定是指在運行時才完成變量、方法和類綁定。當我們創建一個對象并將其分配給一個父類引用時,實際上是將子類的實例轉換成了父類的類型。因此,只有在運行時才能確定對象的類型并且調用適當的方法。這被稱為動態綁定,也稱為晚綁定。舉個例子,我們在上面打印“Animal is making sound”的代碼中,將Dog類的對象賦值給Animal類的引用時:
Animal myanimal = new Dog(); myanimal.sound();
在這種情況下,我們將實例化的Dog類型轉換成Animal類型,并且Java在運行時期通過父類引用來調用子類的方法,這就是一個晚綁定的例子。