Java 中的動態方法排程

Mehvish Ashiq 2023年1月30日 2022年4月26日
  1. Java 中的動態方法排程
  2. Java 中動態方法排程的重要性
  3. Java 中的動態方法排程與程式碼示例
Java 中的動態方法排程

本教程介紹了 Java 中的動態方法分派。它講述了它的技術定義和重要性,並用程式碼示例進行了解釋。

Java 中的動態方法排程

讓我們把這些詞拆開,把排程視為決定呼叫哪個函式(方法)。動態一詞表明它是在執行時確定的。

用最簡單的話來說,我們可以說應該執行哪個函式/方法是在執行時決定的。

考慮到技術定義,動態方法分派(也稱為執行時多型性)是一種用於在執行時而不是編譯時解析對覆蓋方法的呼叫的機制。

當我們使用引用在子類中呼叫被覆蓋的方法時,Java 會根據它所引用的物件的型別來決定執行哪個方法。讓我們通過以下兩個程式碼截圖來理解定義。

關注以下螢幕截圖,其中我們有三個類,分別名為 ShapeRectangleMain 類。Shape 是超類,Rectangle 是子類。

main 方法具有 ShapeRectangle 型別的兩個物件,並將它們的引用儲存在 shaperectangle 變數中。

這些變數呼叫各自類的 display() 方法。例如,如果我們呼叫 shape.display(),將在編譯時決定呼叫 Shape 類的 display(),因為 shape 包含 Shape 的引用`班級。

java 中的動態方法分派——定義第一部分

現在,改變下面截圖中的程式碼。這裡,main 方法包含兩個物件,一個用於 Shape 類,另一個用於 Rectangle 類,但兩者(變數 shaperectangle)都包含 Shape 類的引用.

那麼,程式如何決定哪個過載方法應該被呼叫?這就是動態方法分派發揮作用的地方。

在這裡,Java 根據它所引用的物件的型別來確定應該執行哪個方法。

如果物件是 Rectangle 型別,則呼叫 Rectangle 類的 display(),如果物件是 Shape 型別,則呼叫 Shapedisplay() 方法類將被呼叫。所有這些決定都是在執行時做出的。

這就是我們所說的執行時多型性或動態方法分派。

java 中的動態方法分派——定義第二部分

Java 中動態方法排程的重要性

以下幾點增加了使用動態方法分派的重要性。

  1. 動態方法分派讓 Java 支援執行時多型所必需的方法覆蓋。
  2. 它讓子類合併他們的功能並根據專案需求更新實現。
  3. 它讓超類定義一個與其子類共享的函式/方法,並允許這些子類更新函式的實現。

Java 中的動態方法排程與程式碼示例

示例程式碼:

class Shape {
  Shape(){}
  void display() {
    System.out.println("I am in the Shape class");
  }
}

class Rectangle extends Shape {
  Rectangle(){}
  void display() {
    System.out.println("I am in the Rectangle class");
  }
}

class Triangle extends Shape {
  Triangle(){}
  void display() {
    System.out.println("I am in the Triangle class");
  }
}

public class Main {
  public static void main(String args[]) {
    Shape rectangle = new Rectangle();
    Shape triangle = new Triangle();

    rectangle.display();
    triangle.display();
  }
}

輸出:

I am in the Rectangle class
I am in the Triangle class

在這裡,RectangleTriangle 類擴充套件了 Shape 類。這些類有一個 display() 方法,我們應該稱之為 main 方法。

main 方法有兩個物件,一個用於 Rectangle 型別,另一個用於 Triangle 型別,但引用變數 rectangletriangle 引用同一個名為 Shape 的父類。

如何找出將呼叫哪個函式?在這裡,動態排程方法出現了。

請記住,我們還在以下兩個程式碼中使用了動態繫結和向上轉換。

Shape rectangle = new Rectangle();
Shape triangle = new Triangle();

動態繫結使用物件(類的例項,這裡是 new Rectangle()new Triangle())在執行時解析方法呼叫。

這裡也使用向上轉換,因為父類引用變數(rectangletriangle)正在引用子類 RectangleTriangle

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

相關文章 - Java Method