面向对象三大特性 之 多态(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 Shout() ; 

}    

 

class Wolf: Animals

{ 

    public override void Shout() 

    { 

        Console.Write("狼叫");

    } 

 } 

 

class Sheep:Animals 

{ 

public override voidShout() 

    { 

        Console.Write("羊叫");

    } 

} 

 

      接口继承

      接口的多态性就是当不同的类持续了相同的接口后,都要按照本身的须要从头实现继承的接口,这样实现出来的结果也不相同,这样实现了多态.实例如下:

 

public class Wolf : IShout 

    {

        //多态实现

        public void Shout()

        {

            Console.WriteLine("狼叫");

        }

    }

 

    public class Sheep : IShout 

    {

        //多态实现

        public void Shout() 

        {

            Console.WriteLine("羊叫");

        }

    }

 

    //接口

    public interface IShout 

    {

        void Shout();

    }

    替换

    使用新的派生成员替换基类的成员需要使用 new关键字。如果基类定义了一个方法、字段或属性,则 new 关键字用于在派生类中创建该方法、字段或属性的新定义。new关键字放置在要替换的类成员的返回类型之前。例如:

 

 public class FatherClass//定义父类

    {

        public void Work() { }

        public int Field;

        public int Property

        {

            get { return 0; }

        }

    }

 

    public class SonClass : FatherClass//定义子类继承父类

    {

 

        public new void Work() { }//方法替换

        public new int Field;//字段替换

        public new int Property//属性替换

        {

            get { return 0; }

        }

 

    }

这样多个子类都替换了原来的方法属性和字段就实现了多态.

 

小结

    这就是多态,面向对象设计三大特性中比较难理解的一个,相信多多实践,以后会有更深的理解.

 

 

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码海拾贝2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值