面向对象三剑客之—多态

前言:只要会编程的程序猿都会背的一句话就是面向对象的三大特征是:继承、封装、多态。但是谁能深入的了解呢!今天我把关于自己了解的多态的知识给记录下来,其实我也不会,走一步算一步吧,混了好几年的菜鸟伤不起。

1、多态的定义:

同一操作作用于不同的对象,产生不同的效果,这就是多态。

在C#中支持两种类型的多态性:

 (1)编译时的多态性:编译时的多态性是通过重写来实现的。对于非虚成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

 (2)运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态通过虚成员实现。

2、虚方法的重写:

虚方法怎么定义的,sorry,大伙翻翻书吧,但是我知道虚方法前面有个关键字,virtual,我写的知识点也是园子里大神讲的,我只是copy一下,哈哈,其实这里的虚方法重写和我们常见的重写有区别的,我们常见的重写是方法名一样,只是该面参数类型和数量的重写,这里的重写是虚方法的重写,方法前面加override关键字,之后只改变方法里面的内容。举个例子:

 1 public class AVWoman
 2     {
 3         protected string Name;
 4         public AVWoman() { }
 5         public AVWoman(string name)
 6         {
 7             this.Name = name;
 8         }
 9         public virtual string PaiAV() //注意了这是虚方法
10         {
11             return Name;
12         }
13     }
14 
15     public class CangJingKong : AVWoman
16     {
17 
18         public CangJingKong(string name)
19         {
20             this.Name = name;
21         }
22 
23         public override string PaiAV() //重写方法
24         {
25             return Name;
26         }
27     }
28 
29     public class BoDuoYeJieYi : AVWoman
30     {
31 
32         public BoDuoYeJieYi(string name)
33         {
34             this.Name = name;
35         }
36 
37         public override string PaiAV() //重写方法
38         {
39             return Name;
40         }
41     }
42 
43     public class Test
44     {
45         public static void Main()
46         {
47             AVWoman a = new CangJingKong("WildWar");
48             Console.WriteLine(a.PaiAV());//输出结果为:WildWar
49             Console.ReadLine();
50         }
51     }

3、抽象方法

抽象类和抽象方法需要加关键字abstract,子类必须实现所有的抽象方法,代码示例如下:

 1 public abstract class AVWoman//抽象类
 2     {
 3         public abstract string PaiAV(); //注意了这是抽象方法
 4     }
 5 
 6     public class CangJingKong : AVWoman
 7     {
 8         protected string Name;
 9         public CangJingKong(string name)
10         {
11             this.Name = name;
12         }
13 
14         public override string PaiAV() //重写方法
15         {
16             return Name;
17         }
18     }
19 
20     public class Test
21     {
22         public static void Main()
23         {
24             AVWoman a = new CangJingKong("Tokyo-Hot");
25             Console.WriteLine(a.PaiAV());//输出结果为:Tokyo-Hot
26             Console.ReadLine();
27         }
28     }

4、密封类和密封方法如果将某方法设为密封方法,那么它父类的该方法必须定义为虚方法,密封方法不可被派生类重写,密封方法必须是虚方法的重写,代码如下:

 

 1 public abstract class AVWoman//抽象类
 2     {
 3         public abstract string PaiAV(); //注意了这是抽象方法
 4     }
 5 
 6     public class CangJingKong : AVWoman
 7     {
 8         protected string Name;
 9         public CangJingKong(string name)
10         {
11             this.Name = name;
12         }
13 
14         public sealed override string PaiAV() //密封方法
15         {
16             return Name;
17         }
18     }

 

 

 

posted @ 2013-10-29 10:11  情若天_RunUp  阅读(1241)  评论(6编辑  收藏  举报