首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 靜態綁定與動態綁定深度解析:編譯期 vs 執行期的方法調用機制

     編輯:Java 相關知識

綁定概念

綁定指方法調用與方法所屬類(方法主體)的關聯。Java 分為:

  • 靜態綁定(早期綁定/編譯期綁定):編譯階段確定調用哪個方法。final、static、private、建構子屬此類。
  • 動態綁定(晚期綁定/執行期綁定):執行時根據物件實際類型決定調用哪個方法。其餘所有方法預設為動態綁定。

動態綁定執行流程

  1. JVM 取得物件實際類型的方法表。
  2. 搜尋方法簽名(名稱+參數類型)。
  3. 調用對應方法實作。

多態與向上轉型

動態綁定是 Java 多態的基石。例:

Parent p = new Child();
p.method(); // 編譯看 Parent,執行看 Child

編譯器靜態解析三步驟

  1. 檢查宣告類型的所有同名方法(含繼承而來)。
  2. 根據實參類型進行「重載解析」,選出最匹配簽名。
  3. 若為動態綁定方法,執行時再依實際類型分派。

代碼示範:動態綁定實戰

public interface MyInterface { void doThing(); }

public class Eat implements MyInterface {
    public void doThing() => System.out.println("我在吃東西");
}
public class Drink implements MyInterface {
    public void doThing() => System.out.println("我在喝水");
}
public class Run implements MyInterface {
    public void doThing() => System.out.println("我在奔跑");
}

public class TestDynamicBind {
    public static void main(String[] args) {
        MyInterface mi = null;
        mi = new Eat(); bind(mi);
        mi = new Drink(); bind(mi);
        mi = new Run(); bind(mi);
    }
    static void bind(MyInterface mi) { mi.doThing(); }
}

輸出:

我在吃東西
我在喝水
我在奔跑

特殊說明

  • private 方法隱式 final,不可被覆寫,屬靜態綁定。
  • 宣告為 final 可提升效能(JIT 內聯優化),且防止被覆寫。
  • C++ 需顯式 virtual 開啟動態綁定,Java 預設開啟。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved