专注

导航

面向对象基础-重构

动物中如果又有小牛,小羊来报名,需要参加“叫声比赛”,如何办?原始的方法只要继承即可。

2

但是,我们会发现,Cat、Dog、Bull,Sheep中除了构造方法Shout()之外,几乎没有什么差异。这样子的不好使,比如把shout()中的“我的名字是**”改成“我叫**”,那么四个类都需要改变。
这个时候,我们需要这样子做了。我们还是要把Shout()放到Animal类中,但是现在就不是virtual的了。
此外,我们还需要添加一个getShoutSound()的方法,表示判断是“喵”还是“旺”。

   1:      class Animal
   2:      {
   3:         ..................................................
   4:         public string Shout()
   5:          {
   6:              string result = "";
   7:              for (int i = 0; i < shoutNum; i++)
   8:                  result += getShoutSound() + ",";
   9:              return "我的名字是" + name + "," + result;
  10:          }
  11:          protected virtual string getShoutSound()
  12:          {
  13:              return "";
  14:          }
  15:      }
  16:   
  17:  class Dog:Animal
  18:      {
  19:          public Dog()
  20:              : base()
  21:          {
  22:          }
  23:          public Dog(string name)
  24:              : base(name)
  25:          {
  26:          }
  27:          protected override string getShoutSound()
  28:          {
  29:              return "旺";
  30:          }
  31:  }

posted on 2011-11-13 12:28  陈啊M  阅读(248)  评论(0编辑  收藏  举报