码迷,mamicode.com
首页 > 其他好文 > 详细

17. 动态多态性

时间:2017-10-05 12:20:18      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:virtual   over   mes   作用   ide   logs   说话   重写   推荐   

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 }

 

17. 动态多态性

标签:virtual   over   mes   作用   ide   logs   说话   重写   推荐   

原文地址:http://www.cnblogs.com/yx-xiansheng/p/7628818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!