Language agnostic 与多态性的混淆:参数化、包含、强制和重载

Language agnostic 与多态性的混淆:参数化、包含、强制和重载,language-agnostic,polymorphism,Language Agnostic,Polymorphism,阅读stackoverflow问题,普遍的共识似乎是重载不是多态性的一部分 但是,我的OOP课堂讲稿指出: “有四种多态性:参数、包含、强制和重载” 在注释中,它是指使用具有不同参数的方法重载,以及重载运算符,例如int和float意义上的+ Wikipedia还指出,“许多语言使用函数重载支持即席多态性。” 因此,我很困惑为什么人们说这不是多态性的一部分,就像我认为的那样;对于一种方法,我们有不同的形式 谁能详细说明一下吗 谢谢。特殊多态性将操作符本身视为类似对象,可以重载,但在用户不知道重载

阅读stackoverflow问题,普遍的共识似乎是重载不是多态性的一部分

但是,我的OOP课堂讲稿指出:

“有四种多态性:参数、包含、强制和重载”

在注释中,它是指使用具有不同参数的方法重载,以及重载运算符,例如int和float意义上的+

Wikipedia还指出,“许多语言使用函数重载支持即席多态性。”

因此,我很困惑为什么人们说这不是多态性的一部分,就像我认为的那样;对于一种方法,我们有不同的形式

谁能详细说明一下吗


谢谢。

特殊多态性将操作符本身视为类似对象,可以重载,但在用户不知道重载细节的情况下仍然可以工作。这与对象中多态性的动机基本相同,除了运算符

如果你对单词Poly Morphism的意思有一个严格的定义,那么是的,重载就是多态性。这些方法具有相同的名称、不同的签名,并且运行库根据您使用的签名知道要使用哪个方法。这是同一方法的多种形式。它不是类和继承、动物、狗和猫等多态性的“经典”描述。一些语言有操作符重载。那是同一类型的许多形式吗

这真的取决于你说的是什么。如果你说许多表单只与对象相关,那么它们是的,你不能将重载作为面向对象意义上的“真实”多态性,因为它们是方法,而不是对象

这会有帮助


你可以看到有很多观点。

运算符只是具有奇特语法的函数。他们没有什么特别之处。重载适用于常规命名的函数和运算符(有些语言没有充分的理由为运算符设置特殊规则)。@n.m.这是正确的。支持运算符重载的语言将其作为语法糖的一种形式提供。例如,在Java中,创建一个名为“add”的方法也可以完成同样的任务,但是您无法方便地执行新的整数(5)+42。在这样的语言中,特别多态性是被禁止的。这样做的理由通常是,它会导致草率、不可读的代码。请重新阅读。Java允许重载
add
,这与重载
+
@n.m完全相同,只是“add”不是运算符,因此不是运算符重载。虽然在C++中,操作符重载只是简单的方法,但这不是概念上的情况,请再次阅读。“经营者”一点也不特别。花哨的语法就是这样,花哨的语法。拼写并不是概念上的差异。没有为每个人设置术语的中央权威。有些人认为只有参数多态性才是真正的多态性,有些人认为自组织和包含也可以,还有一些加强制。没有一个真正的分类。可能是重复的,谢谢你的回答。我会马上读的,但我现在很忙。所以我想这取决于解释是否要在多态性中包含重载。另一方面,我知道强制是其中的一部分——这在某种程度上类似于隐式铸造。我想知道你是否认为显式施法适合强制,或者这真的不是多态性?谢谢。再说一次,这取决于你对OOP的理解。它是面向对象的编程。我看不出是我自己。也可以看看这个想法,