首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用多态性的条件

使用多态性的条件
EN

Software Engineering用户
提问于 2014-06-01 18:35:19
回答 3查看 1.2K关注 0票数 0

只有在存在继承方案时才可能存在多态性,或者多态性的实现不依赖于继承。

或者当有遗传的时候,多态性主要是有用的吗?

EN

回答 3

Software Engineering用户

发布于 2014-06-01 18:47:10

计算机科学中的多态性是一个比你的问题所暗示的更广泛的术语:

  • adhoc多态性,支持功能重载;
  • 参数多态,在像List<T>这样的通用容器中实现;
  • 动态多态,或子类型,这依赖于Liskov替换原则。

只有最后一个表单是基于继承的。请参阅http://en.wikipedia.org/wiki/Polymorphism_%28计算机_科学/29

票数 4
EN

Software Engineering用户

发布于 2014-06-01 20:04:10

多态性与遗传无关。

有不同类型的多态性:

  • 参数多态性:在这里,一个子例程被参数化在一个类型上,这意味着它不知道任何关于类型的信息。如果它什么都不知道,那么它显然也不知道任何继承关系。示例是计算列表长度的子例程,它不需要知道列表内容的任何类型。(这种多态性的另一个常见名称是Generics。)
  • ad多态性:与参数多态相反,在参数多态中,子例程不关心类型,对每种类型的行为都是相同的,与ad多态性相反,每种类型都有子例程的ad实现,因此子例程对每种类型的行为都不同。(这种多态性的另一个常见名称是重载。)
  • 包含多态性:这意味着某种亚型关系。(注意:子类型与继承不一样,即使像Java和C#这样的语言混淆了这两种语言。例如,在OCaml中,它们都存在,但它们是不同和不同的概念。)包含多态意味着可以将子类型的实例视为超级类型的实例。( Liskov替换原则告诉我们如何确保安全。)(这种多态性的另一个常见名称是亚型多态性。)

继承可以用于即席多态,在子程序的不同实现之间共享代码,以避免代码重复。但这纯粹是一种减少代码重复的方法,对于即席多态来说,这既不必要,也不足够。

票数 4
EN

Software Engineering用户

发布于 2014-06-01 19:04:12

如果你还没有听说过依赖注入--我认为值得一看。实现DI确实帮助我更好地了解多态性、构造/测试实例或对象等。以下是一些很好的教程:

D。为初学者

基本结构/表面概念

票数 -3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/242678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档