亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java 多態(tài)

在本教程中,我們將通過示例學(xué)習(xí)多態(tài),不同類型的多態(tài)以及如何在Java中實現(xiàn)它們。

多態(tài)是面向?qū)ο缶幊痰闹匾拍?。它只是意味著不止一種形式。也就是說,同一實體(方法,運算符或?qū)ο螅┰诓煌闆r下的行為會有所不同。例如,

Java中的+運算符用于執(zhí)行兩個特定功能。與數(shù)字(整數(shù)和浮點數(shù))一起使用時,將執(zhí)行加法運算。

int a = 5;
int b = 6;
int sum = a + b;     //  sum = 11

當我們將+運算符與字符串一起使用時,它將執(zhí)行字符串連接。例如,

String firstName = "abc ";
String lastName = "xyz";
name = firstName + lastName;     //  name = abc xyz

多態(tài)性的類型

在Java中,多態(tài)可以分為兩種類型:

  • 運行時多態(tài)

  • 編譯時多態(tài)

運行時多態(tài)

在Java中,可以通過方法重寫來實現(xiàn)運行時多態(tài)。

假設(shè)在父類及其子類中創(chuàng)建了相同的方法。在這種情況下,將要調(diào)用的方法取決于用于調(diào)用該方法的對象。例如,

示例1:方法重寫

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();
   }
}

輸出

Bark bark…
Meow-meow...

要了解方法重寫的工作原理,請訪問Java中的方法重寫。

在上面的示例中,該方法makeSound()在兩個不同的類中具有不同的實現(xiàn)。當我們運行程序時

  • 表達式d1.makeSound()將調(diào)用Dog類的方法。這是因為d1是Dog類的對象。

  • 表達式c1.makeSound()將調(diào)用Cat類的方法。這是因為c1是Cat類的對象。

Java中使用方法覆蓋的運行時多態(tài)

在程序執(zhí)行期間確定將要調(diào)用的方法。因此,方法重寫是運行時多態(tài)。

編譯時多態(tài)

可以通過Java中的方法重載和運算符重載來實現(xiàn)編譯時多態(tài)。

方法重載

在Java類中,如果參數(shù)不同,則可以使用相同的名稱創(chuàng)建方法。例如,

void func() { ... }
void func(int a) { ... }
float func(double a) { ... }
float func(int a, float b) { ... }

這在Java中稱為方法重載。

讓我們以方法重載為例。

示例3:方法重載

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('#');
 }
}

輸出

**********
##########

在上面的程序中,displayPattern()方法已重載。

  •  如果我們在不傳遞任何參數(shù)的情況下調(diào)用該方法,則會創(chuàng)建 * 字符的圖案。

  •  如果我們通過將字符作為參數(shù)傳遞來調(diào)用該方法,則會創(chuàng)建 # 字符的圖案。

使用方法重載在Java中編譯時間多態(tài)

要了解有關(guān)方法重載的更多信息,請訪問方法重載

Java方法重載 VS 方法重寫

  • 在方法重寫的情況下,方法應(yīng)該在不同的類中。然而,在方法重載的情況下,方法應(yīng)該在同一個類中。

  •  方法重寫在運行時執(zhí)行,而方法重載在編譯時執(zhí)行。

運算符重載

Java中的某些運算符對不同的操作數(shù)的行為有所不同。例如,

  • + 運算符被重載以執(zhí)行數(shù)字加法和字符串連接。

  • &、|和!為邏輯和按位操作重載。

讓我們看看運算符如何在Java中重載。

Java中的+運算符用于執(zhí)行兩個特定功能。與數(shù)字(整數(shù)和浮點數(shù))一起使用時,將執(zhí)行加法運算。例如,

int a = 5;
int b = 6;
int sum = a + b;     //  sum = 11

當我們將+運算符與字符串一起使用時,它將執(zhí)行字符串連接。例如,

String firstName = "abc ";
String lastName = "xyz";
name = firstName + lastName;     //  name = abc xyz

在像C ++這樣的語言中,我們可以定義運算符以對不同的操作數(shù)進行不同的處理。但是,Java不支持用戶定義的運算符重載。

為什么要多態(tài)?

多態(tài)允許我們創(chuàng)建一致的代碼。例如,

假設(shè)我們需要繪制一個圓和一個正方形。為此,我們可以創(chuàng)建一個Polygon類,Circle和square從中繼承兩個子類。 在這種情況下,有必要在這兩個子類中創(chuàng)建一個具有相同名稱render()的方法,而不是創(chuàng)建具有不同名稱的方法。

在我們的方法重載示例中,我們使用相同的方法名稱displayPattern()來顯示兩個不同的圖案,以保持一致性。

Java中的print()方法也是多態(tài)性(方法重載)的一個實例。同樣的方法用于打印不同類型的值,如char、int、String等。我們還可以使用相同的方法一次打印多個值。

多態(tài)變量

在Java中,對象變量(實例變量)表示多態(tài)變量的行為。這是因為類的對象變量可以引用其類的對象及其子類的對象。例如,

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) {
    
      //聲明Animal類的對象變量a1
      Animal a1;
    
     //創(chuàng)建Animal類的對象
      a1 = new Animal();
      a1.displayInfo();
     //dog類的對象創(chuàng)建
      a1 = new Dog();
      a1.displayInfo();
   }
}

輸出

I am an animal.
I am a dog.

在上面的示例中,我們創(chuàng)建了Animal類的對象變量a1。在這里,a1是一個多態(tài)變量。

這是因為,

  • 在語句中 a1 = new Animal(),a1引用Animal類的對象。

  • 在語句中 a1 = new Dog(),a1引用Dog類的對象。

這是Java中的向上轉(zhuǎn)型示例。要了解更多信息,請訪問Java向上轉(zhuǎn)換和向下轉(zhuǎn)換。