日期:2014-05-17  浏览次数:20828 次

面向对象三大特性 之 多态(C#)

                    面向对象三大特性 多态(C#)

       今天和勇霞在路上走着讨论了一个问题,什么是"多态".通过讨论得出一个令人震惊的结论,那就是"多态我真的不懂你".学习过程中最大的悲哀莫过于明明是不懂却始终觉得自己很清楚,很明白,我理解,我懂得.很庆幸,因为知道了还不懂多态,接下来必然发生的事情就是我会真正的懂得.哈哈!!

       什么是多态?

       "多态"一词最早出现在生物学上,生物学的例子解释多态就是,一只牧羊犬生了一窝小牧羊犬,小牧羊犬都遗传了牧羊犬的特征会"叫",但是每一只小牧羊犬的叫声却各不相同,这就是大名鼎鼎的"多态".面向对象中的多态则是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。更具体点的说法就是通过继承实现的不同对象,调用相同的方法,表现出不同的行为,称之为多态.

       多态的实现

       多态的实现可以通过静态实现或者动态实现

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

       重载方法的定义如下

 

        public int Plus(int x, int y);

 

        public double Plus(double x, double y);

 

就是相同的方法输入不同的参数,当然返回值可以相同也可以不同.要非常注意的就是方法名必须相同.参数必须不同.

 

      动态实现多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过覆写虚成员接口继承或者直接使用新的派生成员替换基成员来实现的。

     

      覆写

 

   子类中为满足自己的需要来重复定义某个方法的不同实现。通过使用override关键字来实现覆写(只有虚方法和抽象方法才能被覆写)。覆写就是将父类的方法名参数列表返回值原封不动的重新再子类中写一遍,所不同的是将原先虚方法或者抽象方法中的关键字(virtual或者abstract)修改成override

 

虚方法:使用virtual关键字声明的方法,虚方法定义的时候可以有实现体.运行的时候确定调用的对象是什么类的实例.多态方法的实现如下:

class Animals 

{ 

    public virtual void Shout() 

    { 

        Console.Write("叫");

    } 

}    

 

class Wolf: Animals

{ 

    public override void Shout() 

    { 

        Console.Write("狼叫");

    } 

 } 

 

class Sheep:Animals 

{ 

public override voidShout() 

    { 

        Console.Write("羊叫");

    } 

} 

//wolfsheep都是animal的子类,三个类都有shout()方法,但是各自的实现内容却不一样,此为多态体现之一.

 

抽象方法:用abstract关键字声明的方法(可以看做是没有实体的虚方法),抽象方法定义的目的就是用来被派生类覆写的,需要注意一点的就是如果类中包含抽象方法,那么类必须被定义成抽象类.多态实现的实例如下:

class Animals 

{ 

    public abstract void