《java基礎》多型 動態繫結

2021-07-03 15:41:50 字數 2213 閱讀 7113

什麼是多型

物件導向的三大特性:封裝、繼承、多型。從一定角度來看,封裝和繼承幾乎都是為多型而準備的。這是我們最後乙個概念,也是最重要的知識點。

多型的定義:指允許不同類的物件對同一訊息做出響應。即同一訊息可以根據傳送物件的不同而採用多種不同的行為方式。(傳送訊息就是函式呼叫)

實現多型的技術稱為:動態繫結(dynamic binding),是指在執行期間判斷所引用物件的實際型別,根據其實際的型別呼叫其相應的方法。

多型的作用:消除型別之間的耦合關係。

現實中,關於多型的例子不勝列舉。比方說按下 f1 鍵這個動作,如果當前在 flash 介面下彈出的就是 as 3 的幫助文件;如果當前在 word 下彈出的就是 word 幫助;在 windows 下彈出的就是 windows 幫助和支援。同乙個事件發生在不同的物件上會產生不同的結果。

下面是多型存在的三個必要條件,要求大家做夢時都能背出來!

多型存在的三個必要條件

一、要有繼承;

二、要有重寫;

三、父類引用指向子類物件

對於多型,可以總結以下幾點:

一、使用父類型別的引用指向子類的物件; 

二、該引用只能呼叫父類中定義的方法和變數; 

三、如果子類中重寫了父類中的乙個方法,那麼在呼叫這個方法的時候,將會呼叫子類中的這個方法;(動態連線、動態呼叫) 

四、變數不能被重寫(覆蓋),」重寫「的概念只針對方法,如果在子類中」重寫「了父類中的變數,那麼在編譯時會報錯。

多型的好處:

1. 可替換性(substitutability)。

多型對已存在**具有可替換性。例如,多型對圓circle類工作,對其他任何圓形幾何體,如圓環,也同樣工作。

2.可擴充性(extensibility)。

多型對**具有可擴充性。增加新的子類不影響已存在類的多型性、繼承性,以及其他特性的執行和操作。實際上新加子類更容易獲得多型功能。例如,在實現了圓錐、半圓錐以及半球體的多型基礎上,很容易增添球體類的多型性。

3.介面性(inte***ce-ability)。

多型是超類通過方法簽名,向子類提供了乙個共同介面,由子類來完善或者覆蓋它而實現的。如圖8.3 所示。圖中超類shape規定了兩個實現多型的介面方法,computearea()以及computevolume()。子類,如circle和sphere為了實現多型,完善或者覆蓋這兩個介面方法。

4.靈活性(flexibility)。

它在應用中體現了靈活多樣的操作,提高了使用效率。

5.簡化性(simplicity)。

多型簡化對應用軟體的**編寫和修改過程,尤其在處理大量物件的運算和操作時,這個特點尤為突出和重要。

classfather   

//這是父類中的func2()方法,因為下面的子類中重寫了該方法 

//所以在父類型別的引用中呼叫時,這個方法將不再有效 

//取而代之的是將呼叫子類中重寫的func2()方法 

public

voidfunc2()   

}   

classchild 

extendsfather   

//func2()重寫了父類father中的func2()方法 

//如果父類型別的引用中呼叫了func2()方法,那麼必然是子類中重寫的這個方法 

public

voidfunc2()   

}   

public

classpolymorphismtest    

}  上面的程式是個很典型的多型的例子。子類child繼承了父類father,並過載了父類的func1()方法,重寫了父類的func2()方法。過載後的func1(int i)和func1()不再是同乙個方法,由於父類中沒有func1(int i),那麼,父類型別的引用child就不能呼叫func1(int i)方法。而子類重寫了func2()方法,那麼父類型別的引用child在呼叫該方法時將會呼叫子類中重寫的func2()。 

那麼該程式將會列印出什麼樣的結果呢? 

很顯然,應該是「ccc」。

JAVA的多型動態繫結

新建乙個物件時,有宣告型別和實際型別之分,如person p new male person為宣告型別,male為實際型別,如果使用p去呼叫方法已經被重寫,那麼p呼叫該方法時,呼叫的是male裡的被重寫的方法。一定可以將子類的例項轉換為父類的例項,因為子類的例項一定是他父類的例項,稱為向上轉換。pe...

多型,動態繫結

呼叫方法時,只要方法重寫了,實際當中調哪個,要看實際中new哪個物件。color red 好處 可擴充套件性達到最好。color 當增加東西時,不需要改原來的結構,直接加上就可以了。color red 多型的存在必要條件 1 要有繼承,2 要有重寫,3 父類引用指向子類物件。color packag...

動態繫結和多型

動態繫結是指 在執行期間 即非編譯期 判斷所引用物件的實際型別,根據其實際的型別呼叫其相應的方法。多型的存在有三個必要條件 1,要求繼承 2,要有重寫 3,父類引用指向子類物件 例 class animal public void enjoy class cat extends animal pub...