<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://www.programiz.com/java-programming/polymorphism](https://www.programiz.com/java-programming/polymorphism) #### 在本教程中,我們將通過示例學習多態,不同類型的多態以及如何在 Java 中實現它們。 多態是面向對象編程的重要概念。 它只是意味著不止一種形式。 也就是說,同一實體(方法,運算符或對象)在不同情況下的行為會有所不同。 例如, Java 中的`+`運算符用于執行兩個特定功能。 與數字(整數和浮點數)一起使用時,將執行加法運算。 ```java int a = 5; int b = 6; int sum = a + b; // Output = 11 ``` 當我們對字符串使用`+`運算符時,它將執行字符串連接。 例如, ```java String firstName = "abc "; String lastName = "xyz"; name = firstName + lastName; // Output = abc xyz ``` * * * ## 多態的類型 在 Java 中,多態可以分為兩種類型: * 運行時多態 * 編譯時多態 ## 運行時多態 在 Java 中,可以通過方法覆蓋來實現運行時多態。 假設在父類及其子類中創建了相同的方法。 在這種情況下,將要調用的方法取決于用于調用該方法的對象。 例如, ### 示例 1:方法覆蓋 ```java abstract class Animal { public abstract void makeSound(); } class Dog extends Animal { @Override public void makeSound() { System.out.println("Bark bark.."); } } class Cat extends Animal { @Override public void makeSound() { System.out.println("Meow meow.."); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.makeSound(); Cat c1 = new Cat(); c1.makeSound(); } } ``` **輸出**: ```java Bark bark… Meow-meow... ``` 要了解方法覆蓋的工作原理,請訪問 Java 中的[方法覆蓋](/java-programming/method-overriding)。 在上面的示例中,方法`makeSound()`在兩個不同的類中具有不同的實現。 當我們運行程序時, * 表達式`d1.makeSound()`將調用`Dog`類的方法。 這是因為`d1`是`Dog`類的對象。 * 表達式`c1.makeSound()`將調用`Cat`類的方法。 這是因為`c1`是`Cat`類的對象。 ![Run-time polymorphism in Java using method overriding](https://img.kancloud.cn/f6/d1/f6d13eb2aaaf4feea4e7bf0bd2b5e197_888x562.png "Java Method overriding") 在程序執行期間確定將要調用的方法。 因此,方法覆蓋是運行時多態。 * * * ## 編譯時多態 可以通過 Java 中的方法重載和運算符重載來實現編譯時多態。 * * * ## 方法重載 在 Java 類中,如果參數不同,則可以創建具有相同名稱的方法。 例如, ```java void func() { ... } void func(int a) { ... } float func(double a) { ... } float func(int a, float b) { ... } ``` 這在 Java 中稱為方法重載。 讓我們以方法重載為例。 ### 示例 3:方法重載 ```java class Demo { public void displayPattern(){ for(int i = 0; i < 10; i++) { System.out.print("*"); } } public void displayPattern(char symbol) { for(int i = 0; i < 10; i++) { System.out.print(symbol); } } } class Main { public static void main(String[] args) { Demo d1 = new Demo(); d1.displayPattern(); System.out.println("\n"); d1.displayPattern('#'); } } ``` **輸出**: ```java ********** ########## ``` 在上述程序中,`displayPattern()`方法已重載。 * 如果我們在不傳遞任何參數的情況下調用該方法,則會創建`*`模式。 * 如果我們通過傳遞一個字符作為參數來調用該方法,則會創建該字符的模式。 ![Compile time polymorphism in Java using method overloading](https://img.kancloud.cn/4e/5d/4e5de950af3e27f3902055a260c63b57_788x1200.png "Java method overloading") 要了解有關方法重載的更多信息,請訪問[方法重載](/java-programming/method-overloading) * * * ### Java 方法重載與方法重載 * 在方法重載的情況下,方法應位于不同的類內。 而在方法重載的情況下,方法應位于同一類內。 * 方法重載在運行時執行,而方法重載在編譯時執行。 * * * ## 運算符重載 Java 中的某些運算符對不同的操作數的行為會有所不同。 例如, * `+`運算符被重載以執行數字加法以及字符串連接,并且 * `&`,`|`和`!`之類的運算符對于邏輯和按位運算都是重載的。 讓我們看看 Java 中操作符是如何重載的。 Java 中的`+`運算符用于執行兩個特定功能。 與數字(整數和浮點數)一起使用時,將執行加法運算。 例如, ```java int a = 5; int b = 6; int sum = a + b; // Output = 11 ``` And when we use `+` operator with strings, it performs string concatenation. 例如: ```java String firstName = "abc "; String lastName = "xyz"; name = firstName + lastName; // Output = abc xyz ``` 在像 C++ 這樣的語言中,我們可以定義運算符以對不同的操作數進行不同的處理。 但是,Java 不支持用戶定義的運算符重載。 * * * ### 為什么要多態? 多態允許我們創建一致的代碼。 例如, 假設我們需要繪制一個圓和一個正方形。 為此,我們可以創建`Polygon`類,并從中繼承兩個子類`Circle`和`Square`。 在這種情況下,有意義的是在這兩個子類中創建具有相同名稱`render()`的方法,而不是創建具有不同名稱的方法。 在我們的方法重載示例中,我們使用相同的方法名稱`displayPattern()`來顯示兩種不同的模式以保持一致性。 Java 中的`print()`方法也是多態(方法重載)的示例。 相同的方法用于打印不同類型的值,例如`char`,`int`和`String`等。我們也可以使用相同的方法一次打印多個值。 * * * ## 多態變量 在 Java 中,對象變量(實例變量)表示多態變量的行為。 這是因為類的對象變量可以引用其類的對象及其子類的對象。 例如, ```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) { // declaration of object variable a1 of the Animal class Animal a1; // object creation of the Animal class a1 = new Animal(); a1.displayInfo(); // object creation of the dog class a1 = new Dog(); a1.displayInfo(); } } ``` **輸出**: ```java I am an animal. I am a dog. ``` 在上面的示例中,我們創建了`Animal`類的對象變量`a1`。 在此,`a1`是多態變量。 這是因為, * 在`a1 = new Animal()`語句中,`a1`是指`Animal`類的對象。 * 在`a1 = new Dog()`語句中,`a1`是指`Dog`類的對象。 這是 Java 中的向上轉換示例。 要了解更多信息,請訪問 [Java 向上轉換和向下轉換](/java-programming/instanceof#upcasting-downcasting)。
                  <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>

                              哎呀哎呀视频在线观看