Java函數重載匹配規則為:精確匹配:參數類型和數量完全相符符合可變參數:可變參數方法匹配任意數量或類型的參數包裝類型與原始類型轉換:基本類型與包裝類型可相互轉換自動包裝/拆箱:基本型別值與包裝類型物件可自動轉換衍生類別類型:衍生類別物件可符合基底類別類型參數
Java函數重載機制的匹配規則
函數重載允許在同一個類別中建立具有相同名稱但參數類型不同的多個方法。當呼叫重載方法時,JVM 會根據參數清單決定要呼叫的最匹配方法。
最佳匹配的確定規則
class Example { public void method(int a) { // ... } public void method(int a, int b) { // ... } }
呼叫 method(1)
會符合 method(int a)
。
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中文網其他相關文章!