0

我有以下关于野生动物园的代码:

public class Bird
{
  public void virtual Exercise()
  {
     some logic here
  }

  public void virtual Feed()
  {
     Exercise();

     some logic here
  }
}


public class Penguin : Bird
{
  public void override Exercise()
  {
     base.Exercise();
     some logic here
  }

  public void override Feed()
  {
     Exercise();
     base.Feed();
     some logic here
  }
}

所以每次喂鸟时也必须锻炼。然而,一只鸟可以在不喂食的情况下锻炼。

企鹅是一种特殊的鸟类,需要鸟类运动和一些特定的企鹅运动。喂企鹅需要喂鸟以及一些额外的企鹅要求。

我在这段代码中遇到的问题是,当调用 Feed 时,它会进行两次鸟类运动。企鹅会很累的。

我怎样才能改进代码,以便在企鹅喂食时,每次喂食只对鸟和企鹅进行一次锻炼?

4

1 回答 1

9

只需从 Penguin.Feed() 调用中删除 Exercise()。因为,正如您所注意到的,当您调用 base.Feed() 时,Exercise() 将被调用,所以这样做是多余的。base.Feed() 调用将调用 Penguin 版本的 Exercise(),因此您将获得适合该鸟的锻炼。

(删除了对哺乳动物的引用,因为它已从问题中删除)

于 2013-04-21T23:45:02.260 回答