多态之虚方法

//当所有的类中我们可以选择出一个类来当做其他类的父类时,我们可以使用虚方法

一个小练习,真的鸭子嘎嘎叫,木头鸭子嚎嚎叫,橡皮鸭子唧唧叫,我们写三个类,一个类是 真的鸭子 类,一个类是 木头鸭子 类,一个类是 橡皮鸭子 类,他们都有一个共同的方法,就是叫的方法,然后我们可以考虑把真的鸭子 类作为父类。

 1   public class RealDuck  //父类,真的鸭子类
 2         {
 3             private string name; //私有字段
 4             public string Name //公开属性
 5             {
 6                 get { return name; }
 7                 set { name = value; }
 8             }
 9             private int age;
10             public int Age
11             {
12                 get { return age; }
13                 set
14                 {
15                     if (value >= 100)
16                     {
17                         age = 1;
18                         return;
19                     }
20                     age = value;
21                 }
22             }
23             public RealDuck(string name, int age)  //构造函数,传入了两个参数,一个是名字,一个是年龄
24             {
25                 Name = name;
26                 Age = age;
27             }
28             public virtual void SayHello()  //将父类的方法写成虚方法,使用关键字virtual,然后这个方法可以被子类重写
29             {
30                 Console.WriteLine("我是真鸭子,我叫{0},我今年{1}岁了,我是嘎嘎的叫", Name, Age);
31             }
32         }
 1   public class MTDuck : RealDuck //木头鸭子类,继承于ReadDuck
 2         {
 3             public MTDuck(string name, int age) : base(name, age) //构造函数,使用base关键字显示的调用父类的构造函数
 4             {
 5             }
 6 
 7             public override void SayHello() //子类的方法前面加一个关键字override,这个方法会被父类重写
 8             {
 9                 Console.WriteLine("我是木头鸭子,我叫{0},今年{1}岁了,我是嚎嚎的叫",Name,Age);
10             }
11         }

 1    public class XPDuck : RealDuck //橡皮鸭子类,继承于RealDuck
 2         {
 3             public XPDuck(string name, int age) : base(name, age)
 4             {
 5 
 6             }
 7             public override void SayHello()
 8             {
 9                 Console.WriteLine("我是橡皮鸭子,我叫{0},我今年{1}岁了,我是唧唧的叫",Name,Age);
10             }
11         }
 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             //真的鸭子嘎嘎叫,木头鸭子嚎嚎叫,橡皮鸭子唧唧叫
 6             RealDuck rd = new RealDuck("鸭子王", 12);
 7             MTDuck md = new MTDuck("木头1", 10);
 8             XPDuck xd = new XPDuck("橡皮1", 19);
 9             RealDuck[] realDucks = { md, xd, rd };
10 
11             for (int i = 0; i < realDucks.Length; i++)
12             {
13                 realDucks[i].SayHello();
14 
15             }
16             Console.ReadKey();
17         }
18     }

 

posted @ 2020-09-06 17:04  LastRunRecord  阅读(148)  评论(0)    收藏  举报