首頁 Java java教程 Java 函數重載機制中如何決定最匹配的方法?

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

Apr 26, 2024 am 09:06 AM
java 方法重載

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

Java 中的平方根 Java 中的平方根 Aug 30, 2024 pm 04:26 PM

Java 中的平方根

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 中的完美數

Java 中的隨機數產生器 Java 中的隨機數產生器 Aug 30, 2024 pm 04:27 PM

Java 中的隨機數產生器

Java 中的阿姆斯壯數 Java 中的阿姆斯壯數 Aug 30, 2024 pm 04:26 PM

Java 中的阿姆斯壯數

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java中的Weka

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 中的史密斯數

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

Java Spring 面試題

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

突破或從Java 8流返回?

See all articles