百科狗-知识改变命运!
--

什么是多态和重载?

梵高1年前 (2023-12-02)阅读数 20#综合百科
文章标签多态性老师

多态性,这个面向对象编程领域的核心概念,本身的内容博大精深,要几句话说清楚实在是不太可能。

多态(Polymorphisn),按字面的意思就是“多种形状”。多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是所有可以放父类对象的地方都可以用它的子类对象来代替,并且有着子类对象的特性,如属性和方法。面向对象设计模式有一个核心原则:里氏代换原则,就是说的这个。

而重载(Overload),是指允许存在多个同名函数,而这些函数的签名也叫参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。其实,重载的概念并不属于“面向对象编程”,重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。

c#的多态怎么简单理解下。。新手看书理解不了。。。谢谢。。。

多态从实现的角度可以划为两类:编译时多态和运行时多态。

编译时的多态性:就是在程序编译的时候,也就是生成解决方案的时候就决定要实现什么操作。

运行时的多态性:就是指直到系统运行时,才根据实际情况决定实现何种操作。

1、多态实现形式不同:

编译时的多态是通过静态连编来实现的;运行时的多态是用动态连编来实现的。

什么是多态和重载?

2、多态性通过方式不同:

编译时的多态性主要是通过函数重载和运算符重载来实现的;运行时的多态性主要是通过虚函数来实现的。

扩展资料:

静态多态性又称编译时的多态性。静态多态性的函数调用速度快、效率高但缺乏灵活性,在程序运行前就应决定执行的函数和方法。

动态多态性的特点是:不在编译时确定调用的是哪个函数,而是在程序运行过程中才动态地确定操作所针对的对象。又称运行时的多态性。动态多态性是通过虚函数(virtual function)实现的。

比如有个学生类,Student 英语老师类EnglishTeacher。学生类 包含一个方法,以老师类为参数。DoWork(EnglishTeacher t) 。客户端调用的时候

Student st=new Student ();

st.DoWork(new EnglishTeacher());

这样就调用成功了。

过了一段时间,我们发现英语老师更换成数学老师了,怎么办?只能新写个类MathTeacher。把学生类的方法参数改为MathTeacher。客户端的其他代码不变,最后一句写st.DoWork(new MathTeacher());

再过了一段时间,学校通知每天都必须换老师,今天是王老师,明天是李老师,后天是周老师。。。。。。。你怎么办?那只能每天新增加一个类,修改学生类的方法参数。这是不是很痛苦呢,老师的变化带来了学生的变化,这应该是没有道理的。这时你就要用多态了,抽象出一个老师类,这是他们所有老师的共同特征。重新写一个抽象类,Teacher。 然后写10个具体的老师类实现这个抽象类。把学生类的方法改为DoWork(Teacher t);

如果要新加老师,添加老师类,实现抽象类,在客户端指定Teacher指向哪一个实例Student st=new Student ();

st.DoWork(new EnglishTeacher());EnglishTeacher可以改为任何其他的老师类。

你的所有类型的老师全都可以用老师Teacher来代替,所以学生类方法里面的参数只用Teacher就可以。这里就体现出了多态的好处:老师有多种形态,可以为王老师,也可以为李老师,但是他们都是老师。不过这里还不完美,你可以去看看抽象工厂模式,在客户端实例化用反射来处理的,代码更优雅,只要改下配置文件,任何代码都不用修改,就能随意指定实例化哪个老师了。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)