Java多態——代碼復用性


  Java中,多態的意為相同的行為,不同的實現。

  其中,多態又分為靜態多態和動態多態。兩者的區別在於:前者在編譯器就可以確定運行期的最終結果,即編譯時就可以確定調用哪個方法;而后者在編譯期則不能確定運行效果,只有運行后,依據所綁定對象的的不同,才能確定運行效果,即運行中系統才能確定方法所指的對象。靜態多態主要體現在方法的重載和單獨使用方法重寫上,而動態多態體現為動態綁定和方法的重寫上。

  引入動態綁定的概念之前,需要先了解轉型技術。轉型即數據類型的轉換,通常發生在賦值符號左右兩邊數據類型不同的時候。

  對於基本數據類型,當表示數據范圍小的數據類型向表示數據范圍大的數據類型轉換(如int類型轉成double類型)時,可以自動完成數據類型的轉換。反之,范圍大的數據類型向范圍小的數據類型轉換時,需要我們進行強制轉換,即用待轉的數據類型用小括號括起來,放在待轉的變量前,完成強制的顯式轉換。但是,不得不指出,強制數據類型轉換會造成數據精度的丟失,比如double類型的3.14轉換成int類型的3,丟失了小數部分0.14的精度。

  對於引用數據類型轉換,有個轉換的前提,它不是所有類型的引用數據類型都能轉,轉換必須要發生在有繼承關系的類身上。同基本數據類型相似,這種引用數據類型轉換分為向上轉型和向下轉型。因為引用數據類型是由“引用”指向具體的對象,實際發生類型轉換時,也僅僅是“引用”的類型的轉換,而實際的對象並不會發生改變。向上轉型即為把子類對象賦值給父類的引用,這樣轉換會自動完成,並且一定成功。向下轉型為將父類引用指向的某個子類對象(即向上轉型的結果)賦值回子類的引用,此時子類引用和原本的子類對象必須相同(級本類引用指向本類對象),否則運行時會發生類型轉換異常。

  有了以上的轉型的概念,我們就可以詳細解釋動態多態:當手上有一個父類引用,調用被子類重寫的方法時,只有運行起來以后,根據該引用實際指向那種對象(父類本身還是某個子類),才能確定這個方法運行后的最終結果。

  若使用了動態多態方法綁定了父類引用,那么能從該父類引用中看到的只有對象中來自父類的被訪問修飾符允許的屬性和行為,那么問題來了,要想要看到子類所特有的屬性和行為應該怎么辦呢,方法中如何確定父類引用綁定的是那種子類對象呢?

  使用instanceof關鍵字,可以完美的解決這一個問題。instanceof關鍵字是一種運算符,用來判斷某個引用所指向的對象是不是某個類型的實例,如果是會的返回boolean值true,否則得到false,這樣,我們也得到了判斷我們綁定的父類引用指向的具體類型的辦法,此時我們就可以用向下轉型,將綁定的父類引用轉換為相應的子類引用,這樣,就可以調出改子類特有的子類和行為。

  當兩個類要綁定關系的時候,即類中的方法需要與對方類關聯起來的時候,綁定對方的父類引用可以獲得更好的可拓展性,提高代碼的復用性。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM