面向对象三剑客之—多态

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

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     }

 

 

 

你可能感兴趣的:(面向对象)