<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Java 中的方法重載 > 原文: [https://beginnersbook.com/2013/05/method-overloading/](https://beginnersbook.com/2013/05/method-overloading/) 方法重載是一種功能,如果類的參數列表不同,則允許類具有多個具有相同名稱的方法。它類似于 Java 中的[構造函數重載](https://beginnersbook.com/2013/05/constructor-overloading/),它允許類具有多個具有不同參數列表的構造函數。 讓我們回到這一點,當我說參數列表時它意味著方法具有的參數:例如,具有兩個參數的方法`add(int a, int b)`的參數列表與方法`add(int a, int b, int c)`的參數列表不同,具有三個參數。 ## 重載方法的三種方法 為了重載方法,方法的參數列表必須在以下任何一個方面有所不同: 1. 參數數量。 例如:這是一個有效的重載情況 ```java add(int, int) add(int, int, int) ``` 2. 參數的數據類型。 例如: ```java add(int, int) add(int, float) ``` 3. 參數的數據類型序列。 例如: ```java add(int, float) add(float, int) ``` **方法重載的情況無效:** 當我說參數列表時,我不是在討論方法的返回類型,例如,如果兩個方法具有相同的名稱,相同的參數并且具有不同的返回類型,那么這不是一個有效的方法重載示例。這將拋出編譯錯誤。 ```java int add(int, int) float add(int, int) ``` **方法重載**是[靜態多態](https://beginnersbook.com/2013/04/runtime-compile-time-polymorphism/)的一個例子。我們將在單獨的教程中討論[多態](https://beginnersbook.com/2013/03/polymorphism-in-java/)及其類型。 **注意事項:** 1. 靜態多態也稱為編譯時綁定或早期綁定。 2. [靜態綁定](https://beginnersbook.com/2013/04/java-static-dynamic-binding/)在編譯時發生。方法重載是靜態綁定的一個示例,其中方法調用與其定義的綁定在編譯時發生。 ## 方法重載示例 如本指南開頭所述,方法重載是通過使用不同參數聲明相同方法來完成的。參數在以下任何一個中都必須不同:參數(或參數)的數量,順序或類型。讓我們看看每個案例的例子。 > 參數列表也稱為參數列表 ### 示例 1:重載 - 參數列表中的參數數量不同 此示例顯示了如何通過具有不同數量的參數來完成方法重載: ```java class DisplayOverloading { public void disp(char c) { System.out.println(c); } public void disp(char c, int num) { System.out.println(c + " "+num); } } class Sample { public static void main(String args[]) { DisplayOverloading obj = new DisplayOverloading(); obj.disp('a'); obj.disp('a',10); } } ``` **輸出:** ```java a a 10 ``` 在上面的例子中 - 方法`disp()`根據參數的數量重載 - 我們有兩個名為`disp`的方法,但它們的參數不同。兩者都具有不同數量的參數。 ### 示例 2:重載 - 參數的數據類型的差異 在此示例中,方法`disp()`基于參數的數據類型重載 - 我們有兩個名為`disp()`的方法,一個使用`char`類型的參數,另一個方法使用`int`類型的參數。 ```java class DisplayOverloading2 { public void disp(char c) { System.out.println(c); } public void disp(int c) { System.out.println(c ); } } class Sample2 { public static void main(String args[]) { DisplayOverloading2 obj = new DisplayOverloading2(); obj.disp('a'); obj.disp(5); } } ``` 輸出: ```java a 5 ``` ### 示例 3:重載 - 參數的數據類型順序 這里方法`disp()`根據參數的數據類型序列重載 - 這兩種方法在參數列表中都有不同的數據類型序列。第一種方法是將參數列表作為`(char, int)`,第二種方法是使用`(int, char)`。由于序列不同,該方法可以過載而沒有任何問題。 ```java class DisplayOverloading3 { public void disp(char c, int num) { System.out.println("I’m the first definition of method disp"); } public void disp(int num, char c) { System.out.println("I’m the second definition of method disp" ); } } class Sample3 { public static void main(String args[]) { DisplayOverloading3 obj = new DisplayOverloading3(); obj.disp('x', 51 ); obj.disp(52, 'y'); } } ``` **輸出:** ```java I’m the first definition of method disp I’m the second definition of method disp ``` ## 方法重載和類型提升 當較小尺寸的數據類型被提升為比這更大的數據類型時稱為類型提升,例如:字節數據類型可以提升為`short`,短數據類型可以提升為`int`,`long`,`double`等。 **它與方法重載有什么關系?** 嗯,理解類型提升是非常重要的,否則你會認為程序會拋出編譯錯誤,但實際上程序會因為類型提升而運行正常。 讓我們舉一個例子,看看我在這里說的是什么: ```java class Demo{ void disp(int a, double b){ System.out.println("Method A"); } void disp(int a, double b, double c){ System.out.println("Method B"); } public static void main(String args[]){ Demo obj = new Demo(); /* I am passing float value as a second argument but * it got promoted to the type double, because there * wasn't any method having arg list as (int, float) */ obj.disp(100, 20.67f); } } ``` 輸出: ```java Method A ``` 正如你可以看到我在調用`disp()`方法時傳遞了`float`值,但它被提升為`double`類型,因為沒有任何帶參數列表的方法為`(int, float)`。 但是這種類型的促銷并不總是發生,讓我們看另一個例子: ```java class Demo{ void disp(int a, double b){ System.out.println("Method A"); } void disp(int a, double b, double c){ System.out.println("Method B"); } void disp(int a, float b){ System.out.println("Method C"); } public static void main(String args[]){ Demo obj = new Demo(); /* This time promotion won't happen as there is * a method with arg list as (int, float) */ obj.disp(100, 20.67f); } } ``` 輸出: ```java Method C ``` 如您所見,此時類型提升未發生,因為存在具有匹配參數類型的方法。 **類型升級表:** 左側的數據類型可以升級為右側的任何數據類型。 ```java byte → short → int → long short → int → long int → long → float → double float → double long → float → double ``` ## 讓我們看幾個有效/無效的方法重載案例 情況 1: ```java int mymethod(int a, int b, float c) int mymethod(int var1, int var2, float var3) ``` 結果:編譯時間錯誤。參數列表完全相同。兩種方法都具有相同的數字,數據類型和相同的數據類型序列。 案例 2: ```java int mymethod(int a, int b) int mymethod(float var1, float var2) ``` 結果:非常好。有效的重載情況。這里參數的數據類型是不同的。 案例 3: ```java int mymethod(int a, int b) int mymethod(int num) ``` 結果:非常好。有效的重載情況。這里的參數數量不同。 案例 4: ```java float mymethod(int a, float b) float mymethod(float var1, int var2) ``` 結果:非常好。有效的重載情況。參數的數據類型的順序是不同的,第一種方法是`(int, float)`,第二種方法是`(float, int)`。 案例 5: ```java int mymethod(int a, int b) float mymethod(int var1, int var2) ``` 結果:編譯時間錯誤。參數列表完全相同。盡管返回類型的方法不同,但它不是有效的情況。由于方法的返回類型在重載方法時無關緊要。 在程序結束前檢查答案之前猜測答案: **問題 1 - 返回類型,方法名稱和參數列表相同。** ```java class Demo { public int myMethod(int num1, int num2) { System.out.println("First myMethod of class Demo"); return num1+num2; } public int myMethod(int var1, int var2) { System.out.println("Second myMethod of class Demo"); return var1-var2; } } class Sample4 { public static void main(String args[]) { Demo obj1= new Demo(); obj1.myMethod(10,10); obj1.myMethod(20,12); } } ``` **答案:** 它會拋出一個編譯錯誤:不能在同一個類中定義多個具有相同名稱和參數列表的方法。 **問題 2 - 返回類型不同。方法名稱和參數列表相同。** ```java class Demo2 { public double myMethod(int num1, int num2) { System.out.println("First myMethod of class Demo"); return num1+num2; } public int myMethod(int var1, int var2) { System.out.println("Second myMethod of class Demo"); return var1-var2; } } class Sample5 { public static void main(String args[]) { Demo2 obj2= new Demo2(); obj2.myMethod(10,10); obj2.myMethod(20,12); } } ``` **答案:** 它會拋出一個編譯錯誤:即使返回類型不同,也不能在類中給出多個具有相同名稱和參數列表的方法。 **方法返回類型在重載的情況下無關緊要。**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看