1、多态
里氏替换原则:
任何能用基类的地方,可以用子类代替,反过来不行。子类能够在基类的基础上增加新的行为。面向对象设计的基本原则之一。
开放封闭原则:
对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。关键是抽象,将一个功能的通用部分和实现细节部分清晰的分离开来。所有面向对象原则的核心。
虚方法实现多态:
1 using System; 2 3 namespace Polymorphism 4 { 5 // 鸟类:父类 6 public class Bird 7 { 8 // 吃:虚方法 9 public virtual void Eat() 10 { 11 Console.WriteLine("我是一只小小鸟,我喜欢吃虫子~"); 12 } 13 } 14 15 // 喜鹊:子类 16 public class Magpie:Bird 17 { 18 // 重写父类中Eat方法 19 public override void Eat() 20 { 21 Console.WriteLine("我是一只喜鹊,我喜欢吃虫子~"); 22 } 23 } 24 25 // 老鹰:子类 26 public class Eagle:Bird 27 { 28 // 重写父类中Eat方法 29 public override void Eat() 30 { 31 Console.WriteLine("我是一只老鹰,我喜欢吃肉~"); 32 } 33 } 34 35 // 企鹅:子类 36 public class Penguin:Bird 37 { 38 // 重写父类中Eat方法 39 public override void Eat() 40 { 41 Console.WriteLine("我是一只小企鹅,我喜欢吃鱼~"); 42 } 43 } 44 45 class MainClass 46 { 47 public static void Main (string[] args) 48 { 49 //创建一个Bird基类数组,添加基类Bird对象,Magpie对象,Eagle对象,Penguin对象 50 Bird[] birds = { 51 new Bird(), 52 new Magpie(), 53 new Eagle(), 54 new Penguin() 55 }; 56 //遍历一下birds数组 57 foreach (Bird bird in birds) 58 { 59 bird.Eat(); 60 } 61 Console.ReadKey(); 62 } 63 } 64 }
运行结果:
抽象实现多态:
1 using System; 2 3 namespace Polymorphism 4 { 5 // 鸟类:父类 6 public abstract class Bird 7 { 8 // 吃:虚方法 9 public abstract void Eat(); 10 } 11 12 // 喜鹊:子类 13 public class Magpie:Bird 14 { 15 // 重写父类中Eat方法 16 public override void Eat() 17 { 18 Console.WriteLine("我是一只喜鹊,我喜欢吃虫子~"); 19 } 20 } 21 22 // 老鹰:子类 23 public class Eagle:Bird 24 { 25 // 重写父类中Eat方法 26 public override void Eat() 27 { 28 Console.WriteLine("我是一只老鹰,我喜欢吃肉~"); 29 } 30 } 31 32 // 企鹅:子类 33 public class Penguin:Bird 34 { 35 // 重写父类中Eat方法 36 public override void Eat() 37 { 38 Console.WriteLine("我是一只小企鹅,我喜欢吃鱼~"); 39 } 40 } 41 42 class MainClass 43 { 44 public static void Main (string[] args) 45 { 46 //创建一个Bird基类数组,添加基类Bird对象,Magpie对象,Eagle对象,Penguin对象 47 Bird[] birds = { 48 new Magpie(), 49 new Eagle(), 50 new Penguin() 51 }; 52 //遍历一下birds数组 53 foreach (Bird bird in birds) 54 { 55 bird.Eat(); 56 } 57 Console.ReadKey(); 58 } 59 } 60 }
运行结果:
接口实现多态:
1 using System; 2 3 namespace Polymorphism 4 { 5 //飞 6 public interface IFlyable 7 { 8 void Fly(); 9 } 10 11 // 鸟类:父类 12 public abstract class Bird 13 { 14 // 吃:虚方法 15 public abstract void Eat(); 16 } 17 18 // 喜鹊:子类 19 public class Magpie:Bird,IFlyable 20 { 21 public void Fly () 22 { 23 Console.WriteLine ("我是一只喜鹊,我会飞~"); 24 } 25 26 // 重写父类中Eat方法 27 public override void Eat() 28 { 29 Console.WriteLine("我是一只喜鹊,我喜欢吃虫子~"); 30 } 31 } 32 33 // 老鹰:子类 34 public class Eagle:Bird,IFlyable 35 { 36 public void Fly () 37 { 38 Console.WriteLine ("我是一只老鹰,我可以飞~"); 39 } 40 41 // 重写父类中Eat方法 42 public override void Eat() 43 { 44 Console.WriteLine("我是一只老鹰,我喜欢吃肉~"); 45 } 46 } 47 48 // 企鹅:子类 49 public class Penguin:Bird 50 { 51 // 重写父类中Eat方法 52 public override void Eat() 53 { 54 Console.WriteLine("我是一只小企鹅,我喜欢吃鱼~"); 55 } 56 } 57 58 class MainClass 59 { 60 public static void Main (string[] args) 61 { 62 //创建一个Bird基类数组,添加基类Bird对象,Magpie对象,Eagle对象,Penguin对象 63 Bird[] birds = { 64 new Magpie(), 65 new Eagle(), 66 new Penguin() 67 }; 68 //遍历一下birds数组 69 foreach (Bird bird in birds) 70 { 71 bird.Eat(); 72 } 73 74 Console.WriteLine ("-----------------------"); 75 76 //创建一个IFlyable接口数组,添加 Magpie对象,Eagle对象 77 IFlyable[] flys = { 78 new Magpie(), 79 new Eagle() 80 }; 81 //遍历一下flys数组 82 foreach (IFlyable fly in flys) 83 { 84 fly.Fly(); 85 } 86 Console.ReadKey(); 87 } 88 } 89 }
运行结果:
原文:http://www.cnblogs.com/Jason-c/p/6647541.html