华南俳烁实业有限公司

java

當前位置:中華考試網(wǎng) >> java >> java教程 >> 文章內(nèi)容

Java多態(tài)和動態(tài)綁定

來源:中華考試網(wǎng)  [2020年12月10日]  【

  在Java中,父類的變量可以引用父類的實例,也可以引用子類的實例。

  多態(tài)存在的三個必要條件:要有繼承、要有重寫、父類變量引用子類對象。

  當使用多態(tài)方式調用方法時:

  首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,則檢查子類是否覆蓋了該方法。

  如果子類覆蓋了該方法,就調用子類的方法,否則調用父類方法。

java課程免費學習,高薪觸手可得

  • 地區(qū):
  • 姓名:
  • 手機:

  動態(tài)綁定

  為了理解多態(tài)的本質,下面講一下Java調用方法的詳細流程。

  1) 編譯器查看對象的聲明類型和方法名。

  假設調用 obj.func(param),obj 為 Cat 類的對象。需要注意的是,有可能存在多個名字為func但參數(shù)簽名不一樣的方法。例如,可能存在方法 func(int) 和 func(String)。編譯器將會一一列舉所有 Cat 類中名為func的方法和其父類 Animal 中訪問屬性為 public 且名為func的方法。

  這樣,編譯器就獲得了所有可能被調用的候選方法列表。

  2) 接下來,編澤器將檢查調用方法時提供的參數(shù)簽名。

  如果在所有名為func的方法中存在一個與提供的參數(shù)簽名完全匹配的方法,那么就選擇這個方法。這個過程被稱為重載解析(overloading resolution)。例如,如果調用 func("hello"),編譯器會選擇 func(String),而不是 func(int)。由于自動類型轉換的存在,例如 int 可以轉換為 double,如果沒有找到與調用方法參數(shù)簽名相同的方法,就進行類型轉換后再繼續(xù)查找,如果最終沒有匹配的類型或者有多個方法與之匹配,那么編譯錯誤。

  這樣,編譯器就獲得了需要調用的方法名字和參數(shù)簽名。

  3) 如果方法的修飾符是private、static、final(static和final將在后續(xù)講解),或者是構造方法,那么編譯器將可以準確地知道應該調用哪個方法,我們將這種調用方式 稱為靜態(tài)綁定(static binding)。

  與此對應的是,調用的方法依賴于對象的實際類型, 并在運行時實現(xiàn)動態(tài)綁。例如調用 func("hello"),編澤器將采用動態(tài)綁定的方式生成一條調用 func(String) 的指令。

責編:yangliu1997

上一篇:Java繼承中方法的覆蓋和重載

下一篇: 沒有了

  • 會計考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語考試
  • 學歷考試
甘孜县| 依兰县| 昌乐县| 宾阳县| 平武县| 汶川县| 高雄县| 海晏县| 临湘市| 濮阳县| 明光市| 娱乐| 开封市| 平定县| 菏泽市| 抚松县| 丹江口市| 巨鹿县| 秭归县| 合水县| 杭州市| 高陵县| 临江市| 永泰县| 安义县| 扶绥县| 白河县| 宁河县| 卢湾区| 潍坊市| 本溪市| 福鼎市| 乐亭县| 涞源县| 隆安县| 洮南市| 阿拉尔市| 德保县| 永寿县| 桦南县| 老河口市|