17. 动态多态性

1、什么是动态多态性?

  在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。

2、有什么作用?

  (1)实现 “功能定义” 与 “功能实现” 的“脱离”,实现代码的进一步灵活性;
  (2)“系统设计” 与 “系统代码” 实现之间进行“脱离”;
  (3)实现代码的稳定性,减少系统 BUG 。

3、总结:

  (1)多态性 new 的时候,声明他的子类;然后子类方法重写或者实现父类接口的方法等;
  (2)子类对象可以赋值给父类对象,但使用中只能使用父类定义的方法。

4、实现方式:
  (1虚方法的动态多态性:
      父类中存在虚方法virtual),子类中重写了对应父类虚方法。子类对象赋值给父类对象时,系统会出现动态多态性;
  (2抽象方法的动态多态性;
  (3接口方法的动态多态性 。


  注:能使用抽象方法就不使用虚方法,能使用接口就不使用抽象。

 1 //例1:虚方法实现动态多态性
 2 namespace ProgramTast1
 3 {
 4     //新建一个 Person 父类
 5     class Person
 6     {
 7         //虚方法实现动态多态性
 8         public virtual void SpeakLanguage()
 9         {
10             Console.WriteLine("Person,说话方法。");
11         }
12     }
13     //新建一个 MeLiu 子类继承父类
14     class MrLiu:Person
15     {
16         //方法重写
17         public override void SpeakLanguage()
18         {
19             Console.WriteLine("MrLiu,说话");
20         }
21     }
22     //新建一个 Tom 子类继承父类
23     class Tom:Person
24     {
25         //方法重写
26         public override void SpeakLanguage()
27         {
28             Console.WriteLine("Tom,说话");
29         }
30     }
31     //新建一个测试类Test
32     class Test
33     {
34         //测试实现动态多态性
35         static void Main(string[] args)
36         {
37             //实例化 MrLiu 调用重写方法
38             Person per = new MrLiu();                       //功能的定义部分
39             per.SpeakLanguage();                            //功能的实现部分
40 
41             //实例化Tom调用重写方法
42             Person per1 = new Tom();
43             per1.SpeakLanguage();
44             Console.ReadKey();
45         }
46     }
47 }

 

 

 1 例2:接口实现多态性
 2 namespace ProgramTast2
 3 {
 4     //定义接口
 5     interface ISpeakable
 6     {
 7         //抽象方法
 8         void SpeakLanguage();
 9     }
10     //MrLiu继承接口
11     class MrLiu : ISpeakable
12     {
13         //显示实现
14         void ISpeakable.SpeakLanguage()
15         {
16             Console.WriteLine("MrLiu ,说话");
17         }
18     }
19     //Tom继承接口
20     class Tom : ISpeakable
21     {
22         void ISpeakable.SpeakLanguage()
23         {
24             Console.WriteLine("Tom , 说话");
25         }
26     }
27     //实现多态
28     class Test
29     {
30         //测试实现动态多态性
31         static void Main(string[] args)
32         {
33             //实现1
34             ISpeakable Ispeak1 = new MrLiu();
35             Ispeak1.SpeakLanguage();
36             //实现2
37             ISpeakable Ispeak2 = new Tom();
38             Ispeak2.SpeakLanguage();
39             Console.ReadKey();
40         }
41     }
42 }

 

posted @ 2017-10-05 10:36  LiuChangwei  阅读(948)  评论(0编辑  收藏  举报