Java多態(tài)概述:
創(chuàng)新互聯(lián)是一家專業(yè)提供昆明企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、成都做網(wǎng)站、H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為昆明眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
多態(tài)是面向?qū)ο缶幊陶Z言的重要特性,它允許基類的指針或引用指向派生類的對象,而在具體訪問時(shí)實(shí)現(xiàn)方法的動態(tài)綁定。Java 對于方法調(diào)用動態(tài)綁定的實(shí)現(xiàn)主要依賴于方法表,但通過類引用調(diào)用(invokevitual)和接口引用調(diào)用(invokeinterface)的實(shí)現(xiàn)則有所不同。
java中實(shí)現(xiàn)多態(tài)需要三個(gè)條件:
1、需要有繼承關(guān)系的存在。
2、需要有方法的重寫。
3、需要有父類的引用指向子類對象。
類引用調(diào)用的大致過程為:Java編譯器將Java源代碼編譯成class文件,在編譯過程中,會根據(jù)靜態(tài)類型將調(diào)用的符號引用寫到class文件中。
在執(zhí)行時(shí),JVM根據(jù)class文件找到調(diào)用方法的符號引用,然后在靜態(tài)類型的方法表中找到偏移量,然后根據(jù)this指針確定對象的實(shí)際類型,使用實(shí)際類型的方法表,偏移量跟靜態(tài)類型中方法表的偏移量一樣,如果在實(shí)際類型的方法表中找到該方法,則直接調(diào)用,否則,認(rèn)為沒有重寫父類該方法。按照繼承關(guān)系從下往上搜索。
從上圖可以看出,當(dāng)程序運(yùn)行時(shí),需要某個(gè)類時(shí),類載入子系統(tǒng)會將相應(yīng)的class文件載入到JVM中,并在內(nèi)部建立該類的類型信息(這個(gè)類型信息其實(shí)就是class文件在JVM中存儲的一種數(shù)據(jù)結(jié)構(gòu)),包含java類定義的所有信息,包括方法代碼,類變量、成員變量、以及本博文要重點(diǎn)討論的方法表。這個(gè)類型信息就存儲在方法區(qū)。
注意,這個(gè)方法區(qū)中的類型信息跟在堆中存放的class對象是不同的。在方法區(qū)中,這個(gè)class的類型信息只有唯一的實(shí)例(所以是各個(gè)線程共享的內(nèi)存區(qū)域),而在堆中可以有多個(gè)該class對象。可以通過堆中的class對象訪問到方法區(qū)中類型信息。就像在java反射機(jī)制那樣,通過class對象可以訪問到該類的所有信息一樣。
以上就是java如何實(shí)現(xiàn)多態(tài)的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!