Java 函數重載機制中如何決定最匹配的方法?
Apr 26, 2024 am 09:06 AMJava函數重載匹配規則為:精確匹配:參數類型和數量完全相符符合可變參數:可變參數方法匹配任意數量或類型的參數包裝類型與原始類型轉換:基本類型與包裝類型可相互轉換自動包裝/拆箱:基本型別值與包裝類型物件可自動轉換衍生類別類型:衍生類別物件可符合基底類別類型參數
Java函數重載機制的匹配規則
函數重載允許在同一個類別中建立具有相同名稱但參數類型不同的多個方法。當呼叫重載方法時,JVM 會根據參數清單決定要呼叫的最匹配方法。
最佳匹配的確定規則
- 精確匹配(Exact Match):如果有任何一個方法的參數清單與調用參數的類型和數量完全匹配,則該方法為最匹配的方法。
class Example { public void method(int a) { // ... } public void method(int a, int b) { // ... } }
呼叫 method(1)
會符合 method(int a)
。
- 符合變數參數(Varargs):如果有一個方法被宣告為可變參數,則該方法可以與任何數量或類型(包括原始類型和物件)的參數匹配。可變參數方法必須作為最後一個方法聲明。
class Example { public void method(Object... args) { // ... } public void method(int a, int b) { // ... } }
呼叫method(1)
或method(1, 2, "Hello")
都會符合method(Object... args )
。
- 包裝類型和原始類型的轉換:基本類型的包裝類型(例如
Integer
)和對應的原始類型(例如int
)可以相互轉換。如果有一個方法來匹配原始類型參數,而呼叫使用包裝類型參數,或者反之亦然,則該方法仍然可以被認為是匹配的。
class Example { public void method(int a) { // ... } public void method(Integer a) { // ... } }
呼叫 method(1)
或 method(new Integer(1))
都能符合這兩個方法。
- 自動裝箱與拆箱:當基本型別值傳遞給包裝型別參數時,會自動裝箱為包裝型別物件。當包裝類型物件傳遞給基本型別參數時,會自動拆箱為基本型別值。
class Example { public void method(int a) { // ... } public void method(Integer a) { // ... } }
呼叫 method(1)
或 method(Integer.valueOf(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中文網其他相關文章!

熱門文章

熱門文章

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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