“多态性与方法重载或方法重写不一样.也不.本身也不是多态的实现”。
这是维基百科的引文
然而,在“面向对象编程”一书中,Timothy指出“四种不同形式的多态性”:
谁是对的?谢谢
发布于 2011-01-31 05:47:33
多态性是编程语言的一个特征或特性。编程语言要么支持,要么不支持。由于编程语言属于有时大不相同的范式的范畴,不同的范式(函数式编程或面向对象的编程)对于在特定范例中如何表达多态性的解释和应用可能略有不同。
据我所知,OOP多态性被认为是基本原则之一,也是非常独特的原则之一。大多数面向对象的语言在其许多特性中具有多态性。简而言之,当具有多态实现的对象的调用方不知道该对象的确切类型时,最好能看到多态。Is通常是继承和转换的结果,也称为亚型多态性,并通过使用vTables工作。
我和许多作者一样认为,操作符重载是多态性的一种表现。因此,如果您重载==操作符以获取TypeA == TypeB,那么如果您正在比较包含A或B类型的随机元素的列表中的元素,则实际上是将TypeB解释为TypeA,您并不真正关心出现了什么,因为它们都可以被平等对待。和其他许多辩论一样,这场辩论也有辩护者和仇恨者。
但这就是OOP的故事结束了。
在函数式(声明式)语言(Lisp,F#)中,由于第一类公民是函数(vs对象),多态是通过函数之间的关系来表达的,并且表现得有点不同。请参阅类型多态性
我想说的最后一句话是,我和其他人一样爱维基百科,但是你必须总是带着一点点盐来看待文章,绝不能盲目地相信它们,而不去确认其他来源。如果您想了解OOP的真正原则,您应该从这里开始:
发布于 2010-12-17 16:57:44
我认为,我所见过的关于多态性的最好定义之一是在运行时识别对象的类型。这似乎强调了对象运行时类型可能与其声明的类型不同,并且在运行时过程中将匹配在对象上调用的方法。
发布于 2010-12-17 17:01:14
我将把确切的定义留给更了解的人(从纯粹主义的角度来看),但从纯粹的语义角度来看,这些说法并不一定相互矛盾。
一种是列出某物的“四种不同形式”,另一种则表示这四种形式中的两种并不是“单独”构成的。有人可能会说,“四种形式”的作者并不是说每一种形式本身都是整体的“完整”例子,而是说它们是整体的组成部分。
尽管如此,我认为“四种形式”的作者更正确,而维基百科的作者也许只是试图解析一些东西。你也是。:p
https://stackoverflow.com/questions/4472845
复制相似问题