Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路程式設計

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java APIs 和框架

Java 類引用

Java 有用資源

Java - 動態繫結



繫結是一種在方法呼叫和方法實際實現之間建立連結的機制。根據Java 中的多型性概念物件可以具有許多不同的形式。物件的形態可以在編譯時和執行時解析。

Java 動態繫結

動態繫結是指在執行時解析方法呼叫和方法實現之間連結的過程(或者,在執行時呼叫重寫方法的過程)。動態繫結也稱為執行時多型性後期繫結。動態繫結使用物件來解析繫結。

Java 動態繫結的特性

  • 連結- 方法呼叫和方法實現之間的連結在執行時解析。

  • 解析機制- 動態繫結使用物件型別來解析繫結。

  • 示例- 方法重寫是動態繫結的示例。

  • 方法型別- 虛方法使用動態繫結。

Java 動態繫結的示例

在這個例子中,我們建立了兩個類 Animal 和 Dog,其中 Dog 類擴充套件了 Animal 類。在 main() 方法中,我們使用 Animal 類引用併為其分配 Dog 類的一個物件來檢查動態繫結的效果。

package com.tutorialspoint;

class Animal {
   public void move() {
      System.out.println("Animals can move");
   }
}

class Dog extends Animal {
   public void move() {
      System.out.println("Dogs can walk and run");
   }
}

public class Tester {

   public static void main(String args[]) {
      Animal a = new Animal();   // Animal reference and object
      // Dynamic Binding	  
      Animal b = new Dog();   // Animal reference but Dog object

      a.move();   // runs the method in Animal class
      b.move();   // runs the method in Dog class
   }
}

輸出

Animals can move
Dogs can walk and run

在上面的例子中,您可以看到,即使b是 Animal 型別,它也會執行 Dog 類中的 move 方法。其原因是:在編譯時,檢查是在引用型別上進行的。但是,在執行時,JVM 會確定物件型別,並執行屬於該特定物件的方法。

因此,在上面的例子中,程式將正確編譯,因為 Animal 類具有 move 方法。然後,在執行時,它執行特定於該物件的方法。

Java 動態繫結:使用 super 關鍵字

當呼叫重寫方法的超類版本時,使用super關鍵字,以便在使用動態繫結時可以使用父類方法。

示例:使用 super 關鍵字

在這個例子中,我們建立了兩個類 Animal 和 Dog,其中 Dog 類擴充套件了 Animal 類。Dog 類重寫了其超類 Animal 的 move 方法。但是它使用 super 關鍵字呼叫父 move() 方法,以便由於動態繫結呼叫子方法時,會呼叫這兩個 move 方法。在 main() 方法中,我們使用 Animal 類引用併為其分配 Dog 類的一個物件來檢查動態繫結的效果。

class Animal {
   public void move() {
      System.out.println("Animals can move");
   }
}

class Dog extends Animal {
   public void move() {
      super.move();   // invokes the super class method
      System.out.println("Dogs can walk and run");
   }
}

public class TestDog {

   public static void main(String args[]) {
      Animal b = new Dog();   // Animal reference but Dog object
      b.move();   // runs the method in Dog class
   }
}

輸出

Animals can move
Dogs can walk and run
廣告