靜態繫結(static binding)和動態繫結(dynamic binding)的區別

Java和C等程式語言支援面向物件程式設計(OOP)。它允許使用物件構建軟體。軟體系統或程式中有許多物件。這些物件具有屬性和方法。屬性描述特徵。方法描述物件可以執行的操作。資料使用方法透過物件傳遞。所需的值透過帶有引數的方法呼叫傳送。實際的方法實現在方法定義中。方法呼叫和方法定義之間存在連結。它被稱為繫結。有兩種型別的繫結。它們是靜態繫結和動態繫結。靜態繫結和動態繫結的關鍵區別在於,在靜態繫結中,繫結...

關鍵區別–靜態綁定與動態綁定

Java和C等編程語言支持面向對象編程(OOP)。它允許使用對象構建軟件。軟件系統或程序中有許多對象。這些對象具有屬性和方法。屬性描述特徵。方法描述對象可以執行的操作。數據使用方法通過對象傳遞。所需的值通過帶有參數的方法調用發送。實際的方法實現在方法定義中。方法調用和方法定義之間存在鏈接。它被稱為綁定。有兩種類型的綁定。它們是靜態綁定和動態綁定。靜態綁定和動態綁定的關鍵區別在於,在靜態綁定中,綁定是在編譯時解析的,而動態綁定是在運行時(即實際執行時間)解析的。本文討論這兩種綁定機制之間的區別。

目錄

1. 概述和主要區別
2. 什麼是靜態綁定
3. 什麼是動態綁定
4. 靜態綁定與動態綁定的相似性
5. 並列比較-靜態綁定與動態綁定的表格形式
6. 摘要

什麼是靜態綁定(static binding)?

綁定是方法調用和方法定義之間的鏈接。

靜態綁定(static binding)和動態綁定(dynamic binding)的區別

圖01:靜態綁定和動態綁定

參考下面用Java編寫的程序。

公共A級{

公共無效方法1(){

System.out.println(“方法1”);

}

公共無效方法2(){

System.out.println(“方法2”);

}

公共靜態void main(String[]args){

A obj=新A();

目標方法1();

目標方法2();

}

}

根據上述程序,創建了A類型的對象。然後調用方法1和方法2。確定應該調用執行的方法稱為綁定。陳述obj.method1()將調用method1()和obj.method2()將調用method2()。此鏈接正在綁定。

在靜態綁定中,綁定由編譯器在編譯時解析。它也被稱為早期綁定。綁定發生在程序實際運行之前。靜態綁定發生在方法重載中。參考下面用Java編寫的程序。

公共空隙計算{

公共無效金額(int x,int y){

System.out.println(“和為”,x+y);

}

公共空白和(雙x,雙y){

System.out.println(“和為”,x+y);

}

公共靜態void main(String[]args){

Calculation cal=新計算();

計算總和(2,3);

計算總和(5.1,6.4);

}

}

根據上面的程序,當傳遞兩個整數時,將調用包含兩個整數的方法。當傳遞兩個double值時,將調用兩個double值對應的方法。此綁定過程發生在編譯時。編譯器知道它應該調用帶有兩個整數值的sum方法計算總和(2,3)。對於cal(5.1,6.4),它將使用兩個雙精度值調用sum方法。所有需要的信息在運行前就知道了,提高了程序的效率和執行速度。

什麼是動態綁定(dynamic binding)?

在動態綁定中,編譯器不會在編譯時解析綁定。綁定發生在運行時。它也被稱為後期綁定。動態綁定發生在方法重寫中。指用Java編寫的程序。

公共類形狀(){

公共無效繪製(){

System.out.println(“繪製”);

}

}

公共類Circle()擴展形狀{

公共無效繪製(){

System.out.println(“畫圓”);

}

}

公共類Triangle()擴展形狀{

公共無效繪製(){

System.out.println(“繪製三角形”);

}

}

公開課考試{

公共靜態void main(String[]args){

形狀s;

s=新形狀();

s、 繪製();

s=新圓();

s、 繪製();

s=新三角形();

s、 繪製();

}

}

根據上面的程序,類Shape有一個draw()方法。類圓和類三角形擴展了形狀類。類圓和類三角可以繼承類Shape的屬性和方法。因此,類形狀是超級類或父類。類圓和類三角形是子類或派生類。這些類還有draw()方法和它們自己的實現。因此,超類中的draw()方法被重寫。

在main方法中,調用不同的對象。有一個Shape類型的引用變量,它是s。然後,s根據特定的類調用方法。在編譯時,編譯器將只引用超級類draw方法。當實際執行開始時,將導致執行不同的繪製方法。首先,s將指向Shape類型的對象。因此,它將調用Shape類中的draw方法。然後s將指向Circle類型的對象,並調用Circle類的draw方法。最後,s將引用Triangle類型的對象,並調用Triangle類中的draw方法。即使引用變量是Shape類型,綁定也恰好依賴於對象類型。這個概念被稱為動態綁定。信息是在運行時提供的,因此與靜態綁定相比,執行速度較慢。

什麼是靜態綁定與動態綁定的相似性(the similarity between static binding and dynamic binding)?

  • 這兩者都與允許對象以多種方式表現的多態性有關。

靜態綁定(static binding)和動態綁定(dynamic binding)的區別

靜態綁定與動態綁定
靜態綁定是在編譯期間收集調用函數所需的所有信息的綁定類型。 動態綁定是在運行時收集調用函數所需的所有信息的綁定類型。
裝訂時間
靜態綁定發生在編譯時。 動態綁定發生在運行時。
功能
靜態綁定使用類型信息進行綁定。 動態綁定使用對象來解析綁定。
實際對象
靜態綁定不使用實際對象進行綁定。 動態綁定,使用實際對象進行綁定。
同義詞
靜態綁定也稱為早期綁定。 動態綁定也稱為後期綁定。
執行
靜態綁定的執行速度很快。 動態綁定的執行速度很低。
例子
靜態綁定用於方法重載。 動態綁定用於方法重寫。

總結 - 靜態綁定(static binding) vs. 動態綁定(dynamic binding)

方法調用和方法定義之間存在鏈接。它被稱為綁定。有兩種類型的綁定稱為靜態綁定和動態綁定。靜態綁定和動態綁定的區別在於,在靜態綁定中,綁定在編譯時解析,而動態綁定在運行時解析,即實際執行時間。由於所需的信息是在運行時之前提供的,所以與動態綁定相比,靜態綁定的執行速度更快。

下載靜態綁定與動態綁定的pdf文件

你可以下載這篇文章的PDF版本,並根據引文說明離線使用。請在這裡下載PDF版本:靜態綁定和動態綁定的區別

引用
  • 發表於 2020-10-19 17:49
  • 閱讀 ( 90 )
  • 分類:科技

你可能感興趣的文章

靜止的(static)和動態記憶體分配(dynamic memory allocation)的區別

關鍵區別–靜態記憶體分配與動態記憶體分配 在程式設計中,有必要儲存計算資料。這些資料儲存在儲存器中。在計算機程式設計中用來儲存資料的儲存器被稱為變數。變數具有特定的資料型別。因此,分配記憶體來執行程...

  • 發佈於 2020-10-11 12:09
  • 閲讀 ( 242 )

早期的(early)和後期裝訂(late binding)的區別

...用於解析方法呼叫。早期繫結發生在編譯時。它也被稱為靜態繫結。在這個過程中,繫結發生在程式實際執行之前。過載方法是使用早期繫結繫結繫結的。參考以下程式。 圖01等級計算   圖02:早期繫結的主程式 根據上面的程...

  • 發佈於 2020-10-19 04:05
  • 閲讀 ( 51 )

多型性(polymorphism)和oop中的繼承(inheritance in oop)的區別

...在多個同名但引數不同的方法時,稱為過載。它也被稱為靜態繫結或編譯時多型性。 壓倒一切 另一種多型性是重寫的。參考下面用Java編寫的程式。 圖02:覆蓋 根據上面的程式,在類a中有一個方法display(),類B是從類a擴充套...

  • 發佈於 2020-10-19 21:16
  • 閲讀 ( 57 )

超載(overloading)和在java中重寫(overriding in java)的區別

...同一物體的行為不同。這個概念被稱為過載。它也被稱為靜態繫結或編譯時間多型性。 也可以使用不同的資料型別過載。請參閱下面的Java程式碼。 圖02解釋了Java程式過載的不同數量 根據上面的程式,類由兩個同名的方法組成...

  • 發佈於 2020-10-19 21:20
  • 閲讀 ( 44 )

活動站點(active site)和結合位點(binding site)的區別

...。 目錄 1. 概述和主要區別 2. 什麼是活動站點 3. 什麼是繫結站點 4. 並列比較-活動位點與結合位點的表格形式 5. 摘要 什麼是活動站點(active site)? 活性中心是酶上化學反應底物結合以進行催化化學反應的區域。該區域由兩個亞...

  • 發佈於 2020-10-22 05:58
  • 閲讀 ( 81 )

靜止的(static)和動態特性(dynamic characters)的區別

靜態與動態特性 在文學領域,靜態人物和動態人物是兩個重要的話題,靜態人物和動態人物之間存在著許多不同之處,使得它們易於識別。那些養成閱讀習慣的人經常在小說、短篇小說等中遇到各種各樣的人物,這些人物並...

  • 發佈於 2020-10-24 16:55
  • 閲讀 ( 47 )

靜止的(static)和動態路由(dynamic routing)的區別

靜態與動態路由 靜態路由和動態路由的區別在於路由條目進入系統的方式。計算機網路中的路由是指在計算機網路中正確地轉發資料包,使資料包最終到達正確的目的地的過程。路由主要有靜態路由和動態路由兩種型別。在...

  • 發佈於 2020-10-29 09:42
  • 閲讀 ( 46 )

靜態穩定性(static stability)和動力穩定性(dynamic stability)的區別

靜態穩定性與動態穩定性 一般來說,飛機的穩定性是指飛機維持特定規定飛行條件的能力。穩定性的概念與飛機的平衡密切相關。如果施加在飛機上的淨力和力矩為零,則飛機處於平衡狀態,即升力等於重量,推力等於阻力...

  • 發佈於 2020-11-03 15:19
  • 閲讀 ( 160 )

如何設定和定製蒸汽控制器

...。Trackball模式讓pad像一個“滾動”的游標球,而不是一個靜態指標。 操縱桿相機:工作原理類似於第三人稱相機在控制檯動作遊戲。 觸控選單:顯示螢幕上的選單,其中多個按鈕動作繫結到觸控板的特定區域。這對於策略遊戲...

  • 發佈於 2021-04-08 02:52
  • 閲讀 ( 46 )

動態(dynamic)和靜態ip(static ip)的區別

動態IP是指每次連線到網路時都會發生變化的IP,而靜態IP是指無論連線多少次或從網路斷開多少次都保持不變的IP。您是否有靜態或動態IP地址取決於所述網路的管理員。每次連線到網路時,動態IP都會發生變化;這是一種在連線...

  • 發佈於 2021-06-22 11:51
  • 閲讀 ( 49 )