1. 程式人生 > >Java基礎知識總結--多型

Java基礎知識總結--多型

面向物件程式設計的三大特性:封裝、繼承、多型

封裝隱藏了類的內部實現機制,可以在不影響使用的情況下改變類的內部結構,同時也保護了資料,而外界而已它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。

繼承是為了重用父類的程式碼,兩個類若存在IS-A關係就可以使用繼承,同時繼承也為多型的實現做了鋪墊。

多型指的是程式中定義的引用變數所指向的具體型別和通過該引用變數發出的方法呼叫在程式設計時並不確定,而是在程式執行期間才確定即一個引用變數到底會指向那個類的例項物件,該引用變數發出的方法呼叫到底是那個類中實現的方法,必須在由程式執行期間才能確定。因為在程式執行時才確定具體是哪一個類,這樣就不用修改程式程式碼,就可以讓引用變數繫結到各種不同的類實現上,那麼該引用所呼叫的具體方法隨之而變,即不修改程式程式碼就可以改變程式執行時所繫結的具體程式碼,讓程式可以選擇多個執行狀態,這就是多型性。

   指向子類的父類引用由於向上轉型了,所以它只能訪問父類中擁有的方法和屬性,而對於子類中存在的但是子類中不存在的方法,該引用是不能使用的,儘管是過載的方法也不行。若子類重寫了父類中的某些方法,在呼叫這些方法的時候,一定是使用子類中重寫的方法。

注意:

   對於面向物件 而言,多型分為編譯時多型執行時多型其中編譯時多型是靜態的,主要是指方法的過載,它是根據引數列表的不同來區分不同的函式,通過編輯之後就會變成兩個不同的函式,這種情況稱不上執行時編譯。但是執行時多型 是動態的,它是通過動態繫結來實現的,也是我們說的多樣性。

多型的實現

一、實現的三個必要條件:繼承、重寫、向上轉型

繼承:在多型中必須有繼承關係的子類和父類。

重寫:子類對父類中某些方法進行重寫,再呼叫這些方法的時候就會呼叫子類的方法。

向上轉型:在多型中需要將子類的物件賦給父類的引用,這樣該引用才能夠具備呼叫父類的方法和子類的方法的功能。

二、實現的形式:繼承和介面。

基於繼承實現的多型:基於繼承的實現機制主要表現在父類和繼承該父類的一個或者多個子類對某些方法的重寫,多個子類對於統一方法的重寫可以表現出不同的行為。

基於介面實現的多型:繼承是通過重寫父類的同一方法的幾個不同子類來體現的,介面就是通過實現介面並覆蓋介面中同一方法的幾個不同類體現的。在介面的多型中,指向介面 的引用例項必須是實現了該介面的一個類的例項程式,在執行時,根據引用物件的實際型別來執行對應的方法。相對於繼承來說具有更好的靈活性。