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");
   }
}
我们不知道任何旧方法。