nop*_*ole 7 oop polymorphism overloading
运算符重载实际上是多态还是参数重载?
多态性通常是指响应相同"消息"(方法名称)的不同类并执行不同的操作,这是真的吗
bird.give_sound()
Run Code Online (Sandbox Code Playgroud)
和
car.give_sound()
Run Code Online (Sandbox Code Playgroud)
可以做不同的事情.参数重载更多的是谈论同一个类,当与消息(方法名称)一起发送的参数不同时,做不同的事情.所以
bird.give_sound()
Run Code Online (Sandbox Code Playgroud)
和
bird.give_sound(:frighten_sound)
Run Code Online (Sandbox Code Playgroud)
可以是不同的.
那么运算符重载是严格的参数重载?像这样:
"foo" + "bar"
"foo" + 3
Run Code Online (Sandbox Code Playgroud)
至少在Ruby中,它是将+消息发送到包含的字符串foo,第一行是用参数字符串发送,第二行是发送参数3,而且+做的事情略有不同,但它是相同的接收器类String
在以下示例中,它是多态的:
"foo" + 3
1 + 3
Run Code Online (Sandbox Code Playgroud)
因为+消息调用不同类的不同方法,但使用相同的消息名称+.那么在这两种情况下,它们是多态的,而不是运算符重载?
以上是否准确无误?是否有可能添加到其中或在上面进行纠正的内容?
我将在黑暗中进行尝试并说这两者都是(但不是真的)。
每个对象都必须以特定的方式处理给定的对象(运算符右侧的对象)。对于字符串,似乎toString会使用该方法(或其他语言的等效方法)。因此,您始终会附加一个字符串(作为 传递给方法Object)。(多态性)
但是,您的对象可能需要根据给定的对象执行不同的逻辑。例如,假设您有一个Student对象。您可能有该方法的一个版本,它接受一个Class对象,并将其添加到学生的课程表中。然后,您可能会遇到重载,例如需要 aBook并将其添加到学生所需阅读材料的集合中。(参数重载)