<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java 方法覆蓋 > 原文: [https://www.programiz.com/java-programming/method-overriding](https://www.programiz.com/java-programming/method-overriding) #### 在本教程中,我們將借助示例學習 Java 中的方法覆蓋。 在上一教程中,我們了解了繼承。 繼承是一個 OOP 屬性,它使我們可以從現有的類(超類)派生一個新的類(子類)。 子類繼承超類的屬性和方法。 現在,如果在超類類和子類類中都定義了相同的方法,則子類類的方法將覆蓋超類的方法。 這稱為方法覆蓋。 * * * ### 示例 1:方法覆蓋 ```java class Animal { public void displayInfo() { System.out.println("I am an animal."); } } class Dog extends Animal { @Override public void displayInfo() { System.out.println("I am a dog."); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } } ``` **輸出**: ```java I am a dog. ``` 在上述程序中,`Animal`超類和`Dog`子類中都存在`displayInfo()`方法。 當我們使用`d1`對象(子類的對象)調用`displayInfo()`時,將調用子類`Dog`內部的方法。 子類的`displayInfo()`方法將覆蓋超類的相同方法。 ![Working of method overriding in Java.](https://img.kancloud.cn/9f/9c/9f9cef46ce8220cfab4dc02dbb73506d_874x562.png "Method Overriding in Java") 注意在我們的示例中使用了`@Override`注解。 在 Java 中,注解是我們用來向編譯器提供信息的元數據。 在此,`@Override`注解指定編譯器,該注解之后的方法將覆蓋超類的方法。 使用`@Override`不是強制性的。 但是,當我們使用此方法時,該方法應遵循所有覆蓋規則。 否則,編譯器將生成錯誤。 * * * ## Java 覆蓋規則 * 父類和子類都必須具有相同的方法名稱,相同的返回類型和相同的參數列表。 * 我們不能覆蓋聲明為`final`和`static`的方法。 * 我們應該始終覆蓋超類的抽象方法(將在以后的教程中進行討論)。 * * * ## Java 覆蓋中的`super`關鍵字 在 Java 中執行覆蓋時出現的一個常見問題是: **覆蓋后可以訪問超類的方法嗎?** 好吧,答案是**是**。 要從子類訪問超類的方法,我們使用`super`關鍵字。 ### 示例 2:使用`super`關鍵字 ```java class Animal { public void displayInfo() { System.out.println("I am an animal."); } } class Dog extends Animal { public void displayInfo() { super.displayInfo(); System.out.println("I am a dog."); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } } ``` **輸出**: ```java I am an animal. I am a dog. ``` 在上面的示例中,子類`Dog`覆蓋了超類`Animal`的方法`displayInfo()`。 當我們使用`Dog`子類的`d1`對象調用方法`displayInfo()`時,將調用`Dog`子類內部的方法; 不會調用超類內部的方法。 在`Dog`子類的`displayInfo()`內部,我們使用`super.displayInfo()`調用超類的`displayInfo()`。 * * * 重要的是要注意,Java 中的構造器不會被繼承。 因此,在 Java 中不存在構造器覆蓋這樣的事情。 但是,我們可以從其子類中調用超類的構造器。 為此,我們使用`super()`。 要了解更多信息,請訪問 [Java `super`關鍵字](/java-programming/super-keyword "Java super keyword")。 * * * ## 方法覆蓋中的訪問說明符 在超類及其子類中聲明的相同方法可以具有不同的訪問說明符。 但是,有一個限制。 我們只能在提供比超類的訪問說明符更大的訪問權限的子類中使用那些訪問說明符。 例如, 假設將超類中的方法`myClass()`聲明為`protected`。 然后,子類中的相同方法`myClass()`可以是`public`或`protected`,但不能是`private`。 ### 示例 3:覆蓋中的訪問說明符 ```java class Animal { protected void displayInfo() { System.out.println("I am an animal."); } } class Dog extends Animal { public void displayInfo() { System.out.println("I am a dog."); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } } ``` **輸出**: ```java I am a dog. ``` In the above example, the subclass `Dog` overrides the method `displayInfo()` of the superclass `Animal`. 每當我們使用`d1`(子類的對象)調用`displayInfo()`時,就會調用子類內部的方法。 請注意,在`Animal`超類中將`displayInfo()`聲明為`protected`。 相同的方法在`Dog`子類中具有`public`訪問說明符。 這是可能的,因為`public`提供的訪問權限大于`protected`。 * * * ## 覆蓋抽象方法 在 Java 中,抽象類被創建為其他類的超類。 并且,如果類包含抽象方法,則必須覆蓋它。 在后面的教程中,我們將學習有關抽象類和抽象方法的覆蓋的更多信息。
                  <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>

                              哎呀哎呀视频在线观看