1. 鯨魚和奶牛

這是一個有趣的動物學事實:一頭牛與鯨魚的關係比與河馬的關係要近得多。原來牛和鯨是比較近的親戚。

看這裡。讓我們來介紹一下多態性——OOP的另一個非常強大的工具。它有四個特點。


2.繼承不是萬能的

想像一下,您已經Cow為遊戲編寫了一個類。它有很多領域和方法。這個類的對象可以做各種事情:走路、吃飯和睡覺。奶牛還戴著鈴鐺,走路時會響起。假設您已經將類中的所有內容都實現到了最小的細節。

然後你的客戶來了,說她想發布一個新的遊戲關卡,其中所有的動作都發生在海上,主角是一頭鯨魚。

你開始設計一個Whale類,並意識到它與類只是略有不同Cow。這兩個類的邏輯非常相似,您決定使用繼承。

Java 中的多態性

該類Cow非常適合承擔父類的角色:它具有所有必要的變量和方法。我們所需要做的就是賦予鯨魚游泳的能力。但有一個問題:你的鯨魚有腿、角和鈴鐺。畢竟,這個功能是在Cow類內部實現的。這裡可以做什麼?

Java 中的多態性。 遺產

3.方法覆蓋

方法覆蓋來拯救我們。如果我們在新類中繼承的方法不能完全滿足我們的要求,我們可以用另一個方法替換該方法。

方法覆蓋

這是怎麼做到的?在我們的後代類中,我們聲明與我們要覆蓋的父類方法相同的方法。我們在其中編寫新代碼。就是這樣——就好像父類中的舊方法根本不存在一樣。

它是這樣工作的:

代碼 描述
class Cow
{
   public void printColor ()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a cow");
   }
}

class Whale extends Cow
{
   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
  • 這裡定義了兩個類——CowWhale
  • Whale繼承Cow
  • Whale重寫printName()方法
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
此代碼在屏幕上顯示以下文本:
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
此代碼在屏幕上顯示以下內容:
I'm a whale

繼承Cow類並重寫printName方法後,該類Whale實際上包含以下數據和方法:

class Whale
{
   public void printColor()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
我們不知道任何舊方法。