继承的特点

  • 继承顺序的不可逆性:继承是从上往下一次继承,而不能逆序进行。
  • 继承的延续性:在继承顺序中,子类具备父类的属性和特征。

继承使用的必要性

  • 代码复用,避免重复。
  • 一处更新,处处更新。

继承的基本使用示例

编写玩具猫和玩具狗的相关程序,要求:

  1.当主人向玩具猫和玩具狗提问时,它们能够根据自己的特征做自我介绍。

  2.当主人说"表演节目"时,玩具猫跳舞、玩具狗赛跑。

程序分析:

  特征(属性):姓名、颜色、类别、喜好食物

  动作(方法):自我介绍、跳舞、赛跑

未使用继承:

 1  /// <summary>
 2     /// 玩具猫类
 3     /// </summary>
 4     public class Cat
 5     {
 6         public string Name { get; set; }//名字
 7         public string Color { get; set; }//颜色
 8         public string Kind { get; set; }//种类
 9         public string Favorite { get; set; }//喜好
10         //自我介绍
11         public void Introduce() {
12             string info = string.Format("我是漂亮的{0},我的名字叫{1},身穿{2}的衣服,我爱吃{3}!",this.Kind,Name,Color,Favorite);
13             Console.WriteLine(info);
14         }
15 
16         //跳舞
17         public void Dancing() {
18             Console.WriteLine("下面给大家表演,请大家鼓掌!");
19         }
20     }
 1 /// <summary>
 2     /// 玩具狗类
 3     /// </summary>
 4     public class Dog
 5     {
 6         public string Name { get; set; }//名字
 7         public string Color { get; set; }//颜色
 8         public string Kind { get; set; }//种类
 9         public string Favorite { get; set; }//喜好
10         //自我介绍
11         public void Introduce()
12         {
13             string info = string.Format("我是漂亮的{0},我的名字叫{1},身穿{2}的衣服,我爱吃{3}!", this.Kind, Name, Color, Favorite);
14             Console.WriteLine(info);
15         }
16 
17         public void Race() {
18             Console.WriteLine("下面给大家表演赛跑,请大家鼓掌!");
19         }
View Code

从上面的程序分析,我们不难发现,玩具猫和玩具狗类的定义存在大量重复代码,因此我们可以将重复的代码(重复的属性和方法)抽取出来,作为一个父类,再继承这个父类,从而实现对代码的复用,减少工作量。

使用继承:

 1 /// <summary>
 2     /// 动物类(父类)
 3     /// </summary>
 4     class Animal
 5     {
 6         public string Name { get; set; }//名字
 7         public string Color { get; set; }//颜色
 8         public string Kind { get; set; }//种类
 9         public string Favorite { get; set; }//喜好
10         //自我介绍
11         public void Introduce()
12         {
13             string info = string.Format("我是漂亮的{0},我的名字叫{1},身穿{2}的衣服,我爱吃{3}!", this.Kind, Name, Color, Favorite);
14             Console.WriteLine(info);
15         }
16     }
View Code
 1 /// <summary>
 2     /// 玩具猫类
 3     /// </summary>
 4     class Cat:Animal//继承Animal类
 5     {
 6         //跳舞
 7         public void Dancing()
 8         {
 9             Console.WriteLine("下面给大家表演,请大家鼓掌!");
10         }
11     }
View Code
 1 /// <summary>
 2     /// 玩具狗类
 3     /// </summary>
 4     class Dog:Animal//继承Animal类
 5     {
 6         public void Race()
 7         {
 8             Console.WriteLine("下面给大家表演赛跑,请大家鼓掌!");
 9         }
10     }
View Code

程序调用:

 1 static void Main(string[] args)
 2         {
 3             //创建两个对象
 4             Cat objCat = new Cat()
 5             {
 6                 Name = "球球",
 7                 Color = "黄色",
 8                 Kind = "小花猫",
 9                 Favorite = "小鱼"
10             };
11             Dog objDog = new Dog()
12             {
13                 Name = "团团",
14                 Color = "黑色",
15                 Kind = "小黑狗",
16                 Favorite = "骨头"
17             };
18 
19             Console.WriteLine("主人要求做自我介绍....");
20             //调用各自的方法
21             objCat.Introduce();
22             objDog.Introduce();
23 
24             Console.WriteLine("主人要求表演节目...");
25             objCat.Dancing();
26             objDog.Race();
27         }
View Code

 继承的基本应用

  1. 继承的步骤与使用要点
    • 抽象公共部分,放到一个特定的类中(父类)。
    • 其他类(子类)只需要继承父类,即可拥有父类特征(属性和方法)。
    • 根据子类的需要添加属于自己的特征和方法。
  2. 具体实现(和接口的实现形式类似)
    • 在子类后面使用冒号":"继承父类,如:class Dog:Animal