搜尋
首頁Javajava教程Java 中的動態綁定

Java 中的動態綁定

Aug 30, 2024 pm 04:06 PM
java

“動態”的意思是“運行時”,“綁定”的意思是“關聯”。因此,術語「動態綁定」表示 Java 虛擬機器在運行時關聯物件。這裡我們將看到Java如何在執行時間實現動態綁定,也就是在程式碼最終運行之前、編譯之後。

語法:對於 Java 中的動態綁定,您應該遵循帶有註解的 java 基本語法。你可以在這裡使用@Override註解來指出我們具體要重寫哪個方法。

廣告 該類別中的熱門課程 JAVA 掌握 - 專業化 | 78 課程系列 | 15 次模擬測驗

動態綁定在 Java 中如何運作?

運行時多態性在 Java 中透過方法重寫來運作。當物件與其父類別具有相同的方法名稱、參數和類型但具有不同的功能時,就會發生方法重寫。如果子類別中有這種類型的方法,我們稱之為重寫方法。

為什麼叫動態綁定?

之所以如此命名,是因為該方法的功能是由 JVM 在運行時根據物件動態決定的。它也稱為“運行時多態性”。當我們透過父類別的類型引用呼叫子類別的重寫方法時(這種現像在java中稱為“Upcasting”),則物件的類型指示將呼叫哪個方法或功能。這個決定是在程式碼編譯後由 JVM 在執行時做出的。因此,它被稱為運行時多態性。也稱為“後期綁定”,因為方法和物件的綁定,即顯示哪個物件的方法的功能,是後期決定的,即在編譯之後。

有關動態綁定的規則

  • 子類別和父類別的方法或函數必須具有相同的名稱。
  • 子類別和父類別的方法或函數必須具有相同的參數。
  • 繼承關係是強制性的(IS-A關係)。

動態綁定的限制

  • 您不能覆寫父類別的私有方法。
  • 你不能重寫 Final 方法。
  • 您不能覆寫靜態方法。

實作動態綁定的範例

我們將在這裡討論動態綁定的一些程式碼範例:

範例#1

在這個範例中,我們將展示locate()方法如何根據與它關聯的物件類型顯示不同的訊息。當它與“大陸”類型關聯時,它顯示來自父類別的消息。當它與“SubContinent”類型關聯時,它會顯示來自子類別的訊息。

代碼:

class Continent {
public void locate () {
System.out.println("We are in Continent");
}
}
class SubContinent extends Continent {
@Override
public void locate () {
System.out.println("We are in SubContinent");
}
}
public class DynamicBinding {
public static void main(String args[]) {
Continent superObject = new Continent ();
superObject.locate(); //method of super class or parent class is called
SubContinent subObject = new SubContinent (); // upcasting
subObject.locate();//method of sub class or child class is called by Parent reference, this is called "Dynamic Binding"
SubContinent subObject2 = new SubContinent ();
subObject2.locate(); //method of sub class or child class is called
}
}

輸出:

Java 中的動態綁定

範例#2

讓我們以多層繼承情況下的動態綁定為例。在此範例中,我們考慮了兩個繼承等級。在此範例中,我們將展示識別方法如何根據與其關聯的物件類型顯示不同的訊息。當它與“計算機”類型關聯時,它顯示來自父類別的消息。當它與“桌面”類型關聯時,它顯示來自其子類別的訊息。同樣,在繼承的第二級中,當與「筆記型電腦」類型關聯時,它顯示來自其父級「桌面」類別的子類別的訊息。

代碼:

class Computer {
void identify() {
System.out.println("This is Computer");
}
}
class Desktop extends Computer {
void identify (){
System.out.println("This is Desktop");
}
}
class Laptop extends Desktop {
void identify (){
System.out.println("This is Laptop");
}
}
public class DynamicBinding {
public static void main(String args[]){
Computer superObject=new Computer ();
Computer subObject=new Desktop (); // // upcasting : first level of heritance
Computer babyObject=new Laptop (); // // upcasting : second level of heritance
superObject.identify ();
subObject.identify (); //run time polymorphism happening in first level of heritance
babyObject.identify (); //run time polymorphism happening in second level of heritance
}
}

輸出:

Java 中的動態綁定

範例#3

讓我們再舉一個多層繼承情況下運行時多態性的例子。在此範例中,我們考慮了三個繼承等級。在此範例中,我們將展示方法 feature () 如何根據與其關聯的物件類型顯示不同的功能。當它與“化妝品”類型關聯時,它顯示來自父類的訊息。當它與“Perfume”類型關聯時,它會顯示來自其子類別的訊息。同樣,在繼承的第二級中,當與“Deo”類型關聯時,它顯示來自其父類別“Perfume”類別的子類別的訊息。同樣在第三級繼承中,當與「DeoStick」類型關聯時,它顯示來自其父類別「Deo」類別的子類別的訊息。

代碼:

class Cosmetics{
void feature() {
System.out.println("Cosmetics are expensive");
}
}
class Perfume extends Cosmetics {
void feature(){
System.out.println("Perfume is soothing");
}
}
class Deo extends Cosmetics {
void feature(){
System.out.println("Deo is sometimes better than perfume");
}
}
class DeoStick extends Deo{
void feature(){
System.out.println("DeoStick is very handy");
}
}
public class RunTimePolymorphism {
public static void main(String args[]){
Cosmetics superObject=new Cosmetics ();
Cosmetics subObject=new Perfume(); // child object type : first level of heritance
Cosmetics sub2Object=new Deo(); // child object type : second level of heritance
Cosmetics sub3Object=new DeoStick(); // child object type : third level of heritance
superObject.feature();
subObject.feature(); //run time polymorphism happening in first level of heritance
sub2Object.feature(); //run time polymorphism happening in second level of heritance
sub3Object.feature(); //run time polymorphism happening in third level of heritance
}
}

輸出:

Java 中的動態綁定

結論

我們對「Java 中的動態綁定」主題的學習到此結束。在java編譯器中自己編寫上面範例中提到的程式碼並驗證輸出。如果你不會自己寫程式碼,那麼程式碼的學習是不完整的。

以上是Java 中的動態綁定的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JVM如何促進Java的'寫作一次,在任何地方運行”(WORA)功能?JVM如何促進Java的'寫作一次,在任何地方運行”(WORA)功能?May 02, 2025 am 12:25 AM

JVM通過字節碼解釋、平台無關的API和動態類加載實現Java的WORA特性:1.字節碼被解釋為機器碼,確保跨平台運行;2.標準API抽像操作系統差異;3.類在運行時動態加載,保證一致性。

Java的較新版本如何解決平台特定問題?Java的較新版本如何解決平台特定問題?May 02, 2025 am 12:18 AM

Java的最新版本通過JVM優化、標準庫改進和第三方庫支持有效解決平台特定問題。 1)JVM優化,如Java11的ZGC提升了垃圾回收性能。 2)標準庫改進,如Java9的模塊系統減少平台相關問題。 3)第三方庫提供平台優化版本,如OpenCV。

說明JVM執行的字節碼驗證的過程。說明JVM執行的字節碼驗證的過程。May 02, 2025 am 12:18 AM

JVM的字節碼驗證過程包括四個關鍵步驟:1)檢查類文件格式是否符合規範,2)驗證字節碼指令的有效性和正確性,3)進行數據流分析確保類型安全,4)平衡驗證的徹底性與性能。通過這些步驟,JVM確保只有安全、正確的字節碼被執行,從而保護程序的完整性和安全性。

平台獨立性如何簡化Java應用程序的部署?平台獨立性如何簡化Java應用程序的部署?May 02, 2025 am 12:15 AM

Java'splatFormIndepentEncealLowsApplicationStorunonAnyOperatingsystemwithajvm.1)singleCodeBase:writeandeandcompileonceforallplatforms.2)easileupdates:updatebybytecodeforsimultanane deployment.3)testOnOneOnePlatForforurouniverSalpeforuluniverSalpehavior formafforulululyiversalivernave.444.44.444

Java的平台獨立性如何隨著時間的流逝而發展?Java的平台獨立性如何隨著時間的流逝而發展?May 02, 2025 am 12:12 AM

Java的平台獨立性通過JVM、JIT編譯、標準化、泛型、lambda表達式和ProjectPanama等技術不斷增強。自1990年代以來,Java從基本的JVM演進到高性能的現代JVM,確保了代碼在不同平台的一致性和高效性。

在Java應用程序中緩解平台特定問題的策略是什麼?在Java應用程序中緩解平台特定問題的策略是什麼?May 01, 2025 am 12:20 AM

Java如何緩解平台特定的問題? Java通過JVM和標準庫來實現平台無關性。 1)使用字節碼和JVM抽像操作系統差異;2)標準庫提供跨平台API,如Paths類處理文件路徑,Charset類處理字符編碼;3)實際項目中使用配置文件和多平台測試來優化和調試。

Java的平台獨立性與微服務體系結構之間有什麼關係?Java的平台獨立性與微服務體系結構之間有什麼關係?May 01, 2025 am 12:16 AM

java'splatformentenceenhancesenhancesmicroservicesharchitecture byferingDeploymentFlexible,一致性,可伸縮性和便攜性。 1)DeploymentFlexibilityAllowsibilityAllowsOllowsOllowSorlowsOllowsOllowsOllowSeStorunonAnyPlatformwithajvM.2)penterencyCrossServAccAcrossServAcrossServiCessImplifififiesDeevelopmentandeDe

GRAALVM與Java的平台獨立目標有何關係?GRAALVM與Java的平台獨立目標有何關係?May 01, 2025 am 12:14 AM

GraalVM通過三種方式增強了Java的平台獨立性:1.跨語言互操作,允許Java與其他語言無縫互操作;2.獨立的運行時環境,通過GraalVMNativeImage將Java程序編譯成本地可執行文件;3.性能優化,Graal編譯器生成高效的機器碼,提升Java程序的性能和一致性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具