多型性polymorphism
維基百科對多型(英語:Polymorphism)一詞的解釋是「物件導向程式執行時,相同的訊息可能會送給多個不同的類別之物件,而系統可依據物件所屬類別,引發對應類別的方法,而有不同的行為」。參照下列程式碼,比較能清楚說明多型的機制。
1. class OOTest {
2. public static void main(String[] args) {
3. SHAPE sobj = null;
4. CIRCLE c1 = new CIRCLE(3.0F);
5. RECTANGLE r1 = new RECTANGLE(3.0F, 4.5F);
6. sobj = c1;
7. sobj.showinfo();
8. System.out.println ("area = " + sobj.area() );
9. sobj = r1;
10. sobj.showinfo();
11. System.out.println ("area = " + sobj.area() );
12. }
13. }
程式碼第3行宣告了一個SHAPE型別變數,但由於SHAPE是個抽象類別,不能建構物件實體,所以sobj物件變數參照初始值設定為null。
在物件導向機制中,父類別型別的物件變數允許參照到其子類別的物件實體,在程式碼第6行,sobj參照到CIRCLE類型物件實體c1,所以程式碼第7行sobj.showinfo()表示叫用CIRCLE類別之showinfo()方法,程式碼第8行sobj.area()表示叫用CIRCLE類別之area()方法。
而當程式碼第9行將sobj參照到RECTANGLE類型物件實體r1之後,程式碼第10行sobj.showinfo()表示叫用RECTANGLE類別之showinfo()方法,程式碼第11行sobj.area()表示叫用RECTANGLE類別之area()方法。
換言之,JVM在叫用方法時會依據參照變數實際所參照的物件實體,動態連結到正確的物件方法,這種機制稱為多型性 (polymorphism)。
This is a circle
area = 28.26
This is a rectangle
area = 13.5