多态之虚方法
//当所有的类中我们可以选择出一个类来当做其他类的父类时,我们可以使用虚方法
一个小练习,真的鸭子嘎嘎叫,木头鸭子嚎嚎叫,橡皮鸭子唧唧叫,我们写三个类,一个类是 真的鸭子 类,一个类是 木头鸭子 类,一个类是 橡皮鸭子 类,他们都有一个共同的方法,就是叫的方法,然后我们可以考虑把真的鸭子 类作为父类。
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 }

浙公网安备 33010602011771号