<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://howtodoinjava.com/oops/method-overloading-and-overriding-rules-in-java/](https://howtodoinjava.com/oops/method-overloading-and-overriding-rules-in-java/) **方法重載和覆蓋**(換句話說,Java 中的[多態](//howtodoinjava.com/object-oriented/what-is-polymorphism-in-java/ "What is polymorphism in java"))既不是一個非常困難的概念,也不是一個非常未知的主題。 但是,我將在本文中介紹這個主題,因為同時使用多個代碼示例在 Java [**面試**](//howtodoinjava.com/java/interviews-questions/real-java-interview-questions-asked-for-oracle-enterprise-manager-project/ "Real java interview questions asked for Oracle Enterprise Manager Project")中測試此類概念時,很容易犯錯誤。 我在這里沒有給出任何新概念,但是我打算修改您有關 Java 中**方法重載和覆蓋規則**的現有知識。 ## 方法重載規則 重載 Java 中的任何方法時,請牢記以下規則: 1)Java 中重載方法的第一個重要規則是**更改方法簽名**。 方法簽名由**變量數量,變量類型和變量順序**(如果它們是不同類型)組成。 ```java public class DemoClass { // Overloaded method public Integer sum(Integer a, Integer b) { return a + b; } // Overloading method public Integer sum(Float a, Integer b) { //Valid return null; } } ``` 2)方法的返回類型從來都不是方法簽名的一部分,因此僅**更改方法的返回類型并不等于方法重載**。 ```java public class DemoClass { // Overloaded method public Integer sum(Integer a, Integer b) { return a + b; } // Overloading method public Float sum(Integer a, Integer b) { //Not valid; Compile time error return null; } } ``` 3)重載方法時,也不會考慮方法引發的異常。 因此,您的重載方法會拋出相同的異常,不同的異常,或者它根本不會引發任何異常。 **對方法加載**完全沒有影響。 ```java public class DemoClass { // Overloaded method public Integer sum(Integer a, Integer b) throws NullPointerException{ return a + b; } // Overloading method public Integer sum(Integer a, Integer b) throws Exception{ //Not valid; Compile time error return null; } } ``` > **閱讀更多:[什么是 Java](//howtodoinjava.com/object-oriented/what-is-polymorphism-in-java/ "What is polymorphism in java")** 中的多態 ## 方法覆蓋規則 我們在上面閱讀了方法重載的規則,現在是時候列出在覆蓋 Java 中的方法時應記住的規則了。 1)覆蓋方法和被覆蓋方法中的**參數列表必須完全相同**。如果它們不匹配,則最終將得到重載方法。 2)覆蓋方法的返回類型可以是在被覆蓋方法中聲明的返回類型的子類。 ```java public class SuperClass { //Overriden method public Number sum(Integer a, Integer b) { return a + b; } } class SubClass extends SuperClass { //Overriding method @Override public Integer sum(Integer a, Integer b) { //Integer extends Number; so it's valid return a + b; } } ``` 3)在所有規則中,不能以任何方式在 Java 中覆蓋**私有,靜態和最終**方法。 就如此容易 !! ```java public class SuperClass { private Integer sum(Integer a, Integer b) { //private method; overriding not possible return a + b; } } class SubClass extends SuperClass { //Overriding method public Integer sum(Integer a, Integer b) { return a + b; } } ``` 4)覆蓋方法無法引發層次結構中比覆蓋方法所引發的異常高的受檢的異常。 例如,假設父類中的覆蓋方法拋出`FileNotFoundException`,子類中的覆蓋方法拋出`FileNotFoundException`; 但不允許拋出`IOException`或`Exception`,因為`IOException`或`Exception`的層次結構較高,即`FileNotFoundException`的超類。 *此外,您可以從覆蓋方法中省略異常聲明。 允許且完全有效。 同樣,無論覆蓋方法是否聲明該異常,覆蓋方法都可以引發任何非受檢的(運行時)異常。* ```java public class SuperClass { //Overriden method public Integer sum(Integer a, Integer b) throws FileNotFoundException { return a + b; } } class SubClass extends SuperClass { //Overriding method public Integer sum(Integer a, Integer b) throws IOException { //Not valid; Compile time error return a + b; } //Exception IOException is not compatible with throws clause in SuperClass.sum(Integer, Integer) public Integer sum(Integer a, Integer b) { //It's valid; Don't declare the exception at all is permitted. return a + b; } } ``` 5)另請注意,**覆蓋方法不能縮小被覆蓋方法**的訪問范圍。 簡而言之,如果父類中的被覆蓋方法受到保護,則子類中的覆蓋方法不能為私有。 它必須是受保護的(相同的訪問權限)或公共的(更廣泛的訪問權限)。 ```java public class SuperClass { //Overriden method protected Integer sum(Integer a, Integer b) { return a + b; } } class SubClass extends SuperClass { //Overriding method //Not valid; Compile time error &quot;Cannot reduce the visibility of the inherited method from SuperClass&quot; private Integer sum(Integer a, Integer b) { return a + b; } } ``` 在父類和子類的術語上進行討論時,不再重復方法覆蓋是合法的。 它不會在同一個類中發生。 要驗證您是否正確覆蓋了方法,只需在覆蓋方法上使用注解`@Override`。 它將為您驗證所有方法替代規則。 如果有任何問題,將導致編譯時錯誤。 > **閱讀更多: [Java 面試問題](//howtodoinjava.com/java-interview-questions/ "Java Interview Questions")** 這就是這個簡單而重要的概念的全部內容,可以幫助您熟練掌握 Java 和面向對象編程的基礎知識。 **祝您學習愉快!** 參考: [Oracle 博客](https://docs.oracle.com/javase/tutorial/java/IandI/override.html)
                  <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>

                              哎呀哎呀视频在线观看