虽然一直在说OOP,但说实话还不是真正的理解,面向对象的三个基本特性继承、封装、多态,前两个性质以前
有接触听的比较多还好理解,下面主要介绍一下第三个特性——多态。
1. 定义
同一操作作用于不同的对象,可以有不同的解释,产生不同的结果,这就是多态。一种接口多种实现。
2. 实现
通过派生类覆写基类中的虚函数型方法来实现的
3. 种类
编译时多态性:重载实现
运行时多态性:覆写虚成员实现
4. 重载和覆写的区别
重载(两必须一可以):方法名必须相同,参数列表必须不同,返回值类型可以不同
覆写(三相同):方法名,参数列表,返回值类型必须相同
5. 用到了向上转型的功能
6. 多态的重要性
设计模式中用到了大量的多态
7多态和继承的区别
多态是父类使用子类的方法,继承是子类使用父类的方法
8.下面是学习C#实现播放DVD和VCD敲的例子,大家可以结合我写的注释好好理解一下
7. using System;
8. using System.Collections.Generic;
9. using System.Linq;
10. using System.Text;
11. using System.Threading.Tasks;
12.
13. namespace 多态的例子2
14. {
15. class Program
16. {
17. static void Main(string[] args)
18. {
19. //DVD dvd = new DVD(); //虽然实现了多态但调用方法未实现多态
20. //Console.WriteLine(dvd.PlayVideo());
21. //VCD vcd = new VCD();
22. //Console.WriteLine(vcd.PlayVideo());
23. Program tt = new Program(); //实例化过程
24. tt.PlayVideo();
25. }
26. public void PlayVideo()
27. {
28. VideoShow vw; //调用了多态
29. vw = new DVD();
30. Console.WriteLine(vw.PlayVideo());
31. vw = new VCD();
32. Console.WriteLine(vw.PlayVideo());
33. }
34. }
35. public abstract class VideoShow //定义抽象超类,所有派生于抽象类的派生类必须实现其方法
36. {
37. public abstract string PlayVideo();
38. }
39. public class VCD : VideoShow
40. {
41. public override string PlayVideo() //派生类
42. {
43. return "正在播放VCD";
44. }
45. }
46. public class DVD : VideoShow
47. {
48. public override string PlayVideo()
49. {
50. return "正在播放DVD";
51. }
52. }