概念
什麼是多態性?多態性是指具有不同功能的函數可以使用相同的函數名,這樣就可以用一個函數名調用不同內容的函數。
實現的前提?父類可以引用子類,也叫向上類型轉換(upcasting)
機制
使用動態綁定機制(Dynamic binding),下面以一個例子來理解動態綁定。
class Instrument{
void play() {
System.out.print(what()+" is playing!");
}
String what() {
return "Instrument";
}
}
class Wind extends Instrument{
String what() {
return "Wind";
}
}
public class Main{
public static void main(String[] args) {
Instrument i=new Wind();
i.play();
}
}
運行結果
當調用play()時,其中會調用到what(),由於Java的動態綁定機制,雖然i已經upcasting到基類Instrument,但是程序運行過程仍會綁定到Wind類的what函數。
動態綁定機制的理解:創建的Wind實例並不會因爲upcasting而真的轉型爲基類類型,實例仍然在存儲在堆空間中,且創建對象時會創建其元數據class信息存儲在方法區,運行過程中通過這些信息幫助函數判斷具體動態綁定到哪個方法。