關鍵區別–靜態綁定與動態綁定
Java和C等編程語言支持面向對象編程(OOP)。它允許使用對象構建軟件。軟件系統或程序中有許多對象。這些對象具有屬性和方法。屬性描述特徵。方法描述對象可以執行的操作。數據使用方法通過對象傳遞。所需的值通過帶有參數的方法調用發送。實際的方法實現在方法定義中。方法調用和方法定義之間存在鏈接。它被稱為綁定。有兩種類型的綁定。它們是靜態綁定和動態綁定。靜態綁定和動態綁定的關鍵區別在於,在靜態綁定中,綁定是在編譯時解析的,而動態綁定是在運行時(即實際執行時間)解析的。本文討論這兩種綁定機制之間的區別。
目錄
1. 概述和主要區別
2. 什麼是靜態綁定
3. 什麼是動態綁定
4. 靜態綁定與動態綁定的相似性
5. 並列比較-靜態綁定與動態綁定的表格形式
6. 摘要
什麼是靜態綁定(static binding)?
綁定是方法調用和方法定義之間的鏈接。
參考下面用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版本:靜態綁定和動態綁定的區別