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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # java 的多態類型 - 運行時和編譯時多態 > 原文: [https://beginnersbook.com/2013/04/runtime-compile-time-polymorphism/](https://beginnersbook.com/2013/04/runtime-compile-time-polymorphism/) 在上一篇教程中,我們討論了 Java 中的[多態。在本指南中,我們將看到**類型的多態**。 java 中有兩種類型的多態: 1)**靜態多態**又稱編譯時多態 2)**動態多態**又稱運行時多態](https://beginnersbook.com/2013/03/polymorphism-in-java/) ## 編譯時多態(或靜態多態) 在編譯器時間內解析的多態稱為靜態多態。方法重載是編譯時多態的一個例子。 **方法重載**:如果方法的參數在參數的數量,順序和數據類型上不同,這允許我們有多個具有相同名稱的方法。我們在這里已經討論了方法重載:如果你沒有閱讀該指南,請參考: [Java 中的方法重載](https://beginnersbook.com/2013/05/method-overloading/) ### 靜態多態的例子 方法重載是 java 支持靜態多態的方式之一。這里我們有兩個相同方法`add()`的定義,其中`add`方法將在編譯時由參數列表確定。這就是為什么它也被稱為編譯時多態。 ```java class SimpleCalculator { int add(int a, int b) { return a+b; } int add(int a, int b, int c) { return a+b+c; } } public class Demo { public static void main(String args[]) { SimpleCalculator obj = new SimpleCalculator(); System.out.println(obj.add(10, 20)); System.out.println(obj.add(10, 20, 30)); } } ``` **輸出:** ```java 30 60 ``` ## 運行時多態(或動態多態) 它也稱為動態方法調度。動態多態是一個在運行時解析對重寫方法的調用的過程,這就是為什么它被稱為運行時多態。我已經在單獨的教程中詳細討論了方法覆蓋,請參考:[方法覆蓋 Java](https://beginnersbook.com/2014/01/method-overriding-in-java-with-example/) 。 **示例** 在此示例中,我們有兩個類`ABC`和`XYZ`。`ABC`是父類,`XYZ`是子類。子類覆蓋父類的`myMethod()`方法。在此示例中,我們將子類對象分配給父類引用,因此為了確定將調用哪個方法,將在運行時確定對象的類型。對象的類型決定了要調用哪個版本的方法(而不是引用的類型)。 > 要理解覆蓋的概念,您應該具有 Java 中[繼承的基本知識](https://beginnersbook.com/2013/03/inheritance-in-java/)。 ```java class ABC{ public void myMethod(){ System.out.println("Overridden Method"); } } public class XYZ extends ABC{ public void myMethod(){ System.out.println("Overriding Method"); } public static void main(String args[]){ ABC obj = new XYZ(); obj.myMethod(); } } ``` **輸出:** ```java Overriding Method ``` 當通過父類的引用調用重寫方法時,該對象的類型確定要執行哪個方法。因此,該確定在運行時進行。 由于兩個類,子類和父類具有相同的方法`animalSound`。將在運行時由 JVM 確定將調用哪個版本的方法(子類或父類)。 **幾個最重要的例子:** ```java ABC obj = new ABC(); obj.myMethod(); // This would call the myMethod() of parent class ABC XYZ obj = new XYZ(); obj.myMethod(); // This would call the myMethod() of child class XYZ ABC obj = new XYZ(); obj.myMethod(); // This would call the myMethod() of child class XYZ ``` 在第三種情況下,要執行子類的方法,因為要執行的方法由對象的類型決定,并且由于對象屬于子類,因此調用`myMethod()`的子類版本。
                  <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>

                              哎呀哎呀视频在线观看