首頁 > Java > java教程 > 主體

Java 函數重載機制中如何決定最匹配的方法?

WBOY
發布: 2024-04-26 09:06:01
原創
491 人瀏覽過

Java函數重載匹配規則為:精確匹配:參數類型和數量完全相符符合可變參數:可變參數方法匹配任意數量或類型的參數包裝類型與原始類型轉換:基本類型與包裝類型可相互轉換自動包裝/拆箱:基本型別值與包裝類型物件可自動轉換衍生類別類型:衍生類別物件可符合基底類別類型參數

Java 函数重载机制中如何确定最匹配的方法?

Java函數重載機制的匹配規則

函數重載允許在同一個類別中建立具有相同名稱但參數類型不同的多個方法。當呼叫重載方法時,JVM 會根據參數清單決定要呼叫的最匹配方法。

最佳匹配的確定規則

  1. 精確匹配(Exact Match):如果有任何一個方法的參數清單與調用參數的類型和數量完全匹配,則該方法為最匹配的方法。
class Example {
    public void method(int a) {
        // ...
    }

    public void method(int a, int b) {
        // ...
    }
}
登入後複製

呼叫 method(1) 會符合 method(int a)

  1. 符合變數參數(Varargs):如果有一個方法被宣告為可變參數,則該方法可以與任何數量或類型(包括原始類型和物件)的參數匹配。可變參數方法必須作為最後一個方法聲明。
class Example {
    public void method(Object... args) {
        // ...
    }

    public void method(int a, int b) {
        // ...
    }
}
登入後複製

呼叫method(1)method(1, 2, "Hello") 都會符合method(Object... args )

  1. 包裝類型和原始類型的轉換:基本類型的包裝類型(例如Integer)和對應的原始類型(例如int)可以相互轉換。如果有一個方法來匹配原始類型參數,而呼叫使用包裝類型參數,或者反之亦然,則該方法仍然可以被認為是匹配的。
class Example {
    public void method(int a) {
        // ...
    }

    public void method(Integer a) {
        // ...
    }
}
登入後複製
登入後複製

呼叫 method(1)method(new Integer(1)) 都能符合這兩個方法。

  1. 自動裝箱與拆箱:當基本型別值傳遞給包裝型別參數時,會自動裝箱為包裝型別物件。當包裝類型物件傳遞給基本型別參數時,會自動拆箱為基本型別值。
class Example {
    public void method(int a) {
        // ...
    }

    public void method(Integer a) {
        // ...
    }
}
登入後複製
登入後複製

呼叫 method(1)method(Integer.valueOf(1)) 都能符合這兩個方法。

  1. 衍生類別類型:當呼叫使用衍生類別物件的參數時,該參數也可以符合其基底類別類型的參數。
class Animal {
    public void makeSound() {
        // ...
    }
}

class Dog extends Animal {
    public void makeSound() {
        // ...
    }
}
登入後複製

呼叫 makeSound(new Dog()) 也會符合 makeSound(Animal a) 方法。

實戰案例

假設有一個Shape 類,它有以下方法:

public class Shape {
    public void draw() {
        // ...
    }

    public void draw(int size) {
        // ...
    }

    public void draw(int size, boolean fill) {
        // ...
    }
}
登入後複製

當呼叫Shape shape = new Shape(); shape.draw(5); 時,JVM 會決定最符合的方法為draw(int size)。這是因為呼叫中提供了 size 參數,而沒有提供 fill 參數,因此 draw(int size, boolean fill) 不是一個精確匹配。

以上是Java 函數重載機制中如何決定最匹配的方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板