CodeGym/Java Blog/Toto sisi/Java 中的多態性
John Squirrels
等級 41
San Francisco

Java 中的多態性

在 Toto sisi 群組發布
個成員
你好!今天我們總結了一系列關於 OOP 原理的課程。在本課中,我們將討論 Java 多態性。多態性是處理多種類型的能力,就好像它們是同一類型一樣。此外,對象的行為將根據它們的類型而有所不同。讓我們仔細看看這個聲明。讓我們從第一部分開始:“使用多種類型的能力,就好像它們是同一類型一樣”。不同的類型怎麼可能相同呢?聽起來有點奇怪:/如何使用多態 - 1事實上,這一切都很簡單。例如,這種情況出現在普通使用繼承的過程中。讓我們看看它是如何工作的。假設我們有一個簡單的Cat父類,只有一個run()方法:
public class Cat {

   public void run() {
       System.out.println("Run!");
   }
}
現在我們將創建三個繼承Cat的類:LionTigerCheetah
public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Lion runs at 80 km/h");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Tiger runs at 60 km/h");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Cheetah runs at up to 120 km/h");
   }
}
所以我們有3個班級。讓我們模擬我們可以與他們一起工作的情況,就好像他們是同一個班級一樣。想像一下,我們的一隻貓生病了,需要 Dolittle 醫生的幫助。讓我們嘗試創建一個可以治愈獅子、老虎和獵豹的 Dolittle類。
public class Dolittle {

   public void healLion(Lion lion) {

       System.out.println("Lion is healthy!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Tiger is healthy!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Cheetah is healthy!");
   }
}
看起來問題已經解決了:課程已經寫好了,可以開始了。但是,如果我們想擴展我們的程序,我們該怎麼辦?我們目前只有 3 種類型:獅子、老虎和獵豹。但世界上有 40 多種貓科動物。想像一下,如果我們為人工貓、美洲虎、緬因浣熊、家貓和其他所有動物添加單獨的類會發生什麼。 如何使用多態 - 2程序本身當然可以運行,但我們必須不斷地向Dolittle類添加新方法來治療每種類型的貓。結果,它將增長到前所未有的規模。這就是多態性——“處理多種類型的能力,就好像它們是同一類型”——的用武之地。我們不需要創建無數的方法來做同樣的事情——治愈一隻貓。一種方法就足夠了:
public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
   }
}
healCat ()方法可以接受LionTigerCheetah對象——它們都是Cat的實例:
public class Main {

   public static void main(String[] args) {

       Dolittle dolittle = new Dolittle();

       Lion simba = new Lion();
       Tiger shereKhan = new Tiger();
       Cheetah chester = new Cheetah();

       dolittle.healCat(simba);
       dolittle.healCat(shereKhan);
       dolittle.healCat(chester);
   }
}
控制台輸出: 患者健康!病人很健康!病人很健康! 所以我們的傻瓜類與不同類型一起工作,就好像它們是同一類型一樣。現在讓我們來處理第二部分:“此外,對象的行為將根據它們的類型而有所不同”。這一切都非常簡單。在自然界中,每隻貓都以不同的方式奔跑。至少,它們以不同的速度運行。在我們的三種貓科動物中,獵豹跑得最快,而老虎和獅子跑得較慢。換句話說,他們的行為是不同的。多態性不僅僅是讓我們將不同的類型作為一個來使用。它還讓我們記住它們的差異,保留它們各自的特定行為。下面的例子說明了這一點。假設我們的貓在成功康復後決定享受一點跑步。我們將把它添加到我們的Dolittle類中:
public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
       cat.run();
   }
}
讓我們嘗試運行相同的代碼來治療三隻動物:
public static void main(String[] args) {

   Dolittle dolittle = new Dolittle();

   Lion simba = new Lion();
   Tiger shereKhan = new Tiger();
   Cheetah chester = new Cheetah();

   dolittle.healCat(simba);
   dolittle.healCat(shereKhan);
   dolittle.healCat(chester);
}
結果是這樣的: 病人很健康!獅子以 80 公里/小時的速度奔跑。病人很健康!老虎以 60 公里/小時的速度奔跑。病人很健康!Cheetah 以高達 120 km/h 的速度奔跑 在這裡,我們清楚地看到對象的特定行為得到保留,即使我們在將所有三種動物“泛化”到Cat之後將它們傳遞給該方法。由於多態性,Java 清楚地記得這些不僅僅是任何三隻貓。它們是獅子、老虎和獵豹,它們的奔跑方式各不相同。 這說明了多態的主要優點:靈活性。當我們需要實現一些由多種類型共享的功能時,獅子、老虎和獵豹就簡單地變成了“貓”。所有的動物都是不同的,但在某些情況下,貓就是貓,無論它的種類如何:)這裡有一些視頻確認給你。
當這種“概括”是不需要的,而我們需要每個物種的行為不同時,每個類型都會做自己的事情。由於多態性,您可以為範圍廣泛的類創建單個接口(方法集)。這使得程序不那麼複雜。即使我們將程序擴展到支持 40 種貓,我們仍然有最簡單的接口:一個run()方法用於所有 40 種貓。
留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言