<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://beginnersbook.com/2013/04/java-static-dynamic-binding/](https://beginnersbook.com/2013/04/java-static-dynamic-binding/) 方法調用與方法體的關聯稱為綁定。有兩種類型的綁定:**靜態綁定**在編譯時發生,**動態綁定**在運行時發生。在我解釋 java 中的靜態和動態綁定之前,讓我們看一些可以幫助您更好地理解這個概念的術語。 ## 什么是引用和對象? ```java class Human{ .... } class Boy extends Human{ public static void main( String args[]) { /*This statement simply creates an object of class *Boy and assigns a reference of Boy to it*/ Boy obj1 = new Boy(); /* Since Boy extends Human class. The object creation * can be done in this way. Parent class reference * can have child class reference assigned to it */ Human obj2 = new Boy(); } } ``` ## Java 中的靜態和動態綁定 如上所述,方法定義與方法調用的關聯稱為綁定。有兩種類型的綁定:靜態綁定和動態綁定。讓我們討論一下。 ### 靜態綁定或早期綁定 編譯器在編譯時可以解析的綁定稱為靜態或早期綁定。`static`,`private`和`final`方法的綁定是[編譯時](https://beginnersbook.com/2013/04/runtime-compile-time-polymorphism/)。 **為什么?** 原因是無法覆蓋這些方法,并且在編譯時確定類的類型。讓我們看一個例子來理解這個: ### 靜態綁定示例 在這里,我們有兩個類人類和男孩。這兩個類都有相同的方法`walk()`,但方法是靜態的,這意味著它不能被覆蓋,所以即使我在創建對象`obj`時使用了`Boy`類的對象,它也會調用父類方法。因為引用是`Human`類型(父類)。因此,每當靜態,私有和最終方法的綁定發生時,類的類型由編譯器在編譯時確定,然后綁定發生在那里。 ```java class Human{ public static void walk() { System.out.println("Human walks"); } } class Boy extends Human{ public static void walk(){ System.out.println("Boy walks"); } public static void main( String args[]) { /* Reference is of Human type and object is * Boy type */ Human obj = new Boy(); /* Reference is of HUman type and object is * of Human type. */ Human obj2 = new Human(); obj.walk(); obj2.walk(); } } ``` 輸出: ```java Human walks Human walks ``` ### 動態綁定或后期綁定 當編譯器無法在編譯時解析調用/綁定時,此類綁定稱為動態綁定或后期綁定。[方法覆蓋](https://beginnersbook.com/2014/01/method-overriding-in-java-with-example/)是動態綁定的一個完美示例,因為覆蓋父類和子類具有相同的方法,在這種情況下,對象的**類型確定要執行的方法。對象的類型在運行時確定,因此稱為動態綁定**。 ### 動態綁定示例 這是我們在上面看到的相同的例子。這里唯一的區別是,在這個例子中,覆蓋實際上正在發生,因為這些方法是**而不是**靜態,私有和最終。在覆蓋的情況下,對覆蓋方法的調用在運行時由對象類型確定,從而發生后期綁定。讓我們看一個例子來理解這個: ```java class Human{ //Overridden Method public void walk() { System.out.println("Human walks"); } } class Demo extends Human{ //Overriding Method public void walk(){ System.out.println("Boy walks"); } public static void main( String args[]) { /* Reference is of Human type and object is * Boy type */ Human obj = new Demo(); /* Reference is of HUman type and object is * of Human type. */ Human obj2 = new Human(); obj.walk(); obj2.walk(); } } ``` 輸出: ```java Boy walks Human walks ``` 正如您所看到的那樣,輸出與我們在靜態綁定示例中看到的不同,因為在這種情況下,在創建對象`obj`時,對象的類型被確定為`Boy`類型,因此調用`Boy`類的方法。請記住,對象的類型是在運行時確定的。 ## 靜態綁定與動態綁定 讓我們討論 Java 中靜態和動態綁定之間的**差異**。 1. 靜態綁定在編譯時發生,而動態綁定在運行時發生。 2. 私有,靜態和最終方法的綁定總是在編譯時發生,因為這些方法無法被覆蓋。當實際發生方法覆蓋并將父類型的引用分配給子類類型的對象時,則在運行時期間解析此類綁定。 3. [重載方法](https://beginnersbook.com/2013/05/method-overloading/)的綁定是靜態的,并且覆蓋方法的綁定是動態的。
                  <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>

                              哎呀哎呀视频在线观看