(迂腐的问题)
根据维基百科多态性有 3 种类型:
指的是可以应用于参数的多态函数
不同的类型,但根据类型的不同,其行为也不同
它们所适用的论点
换句话说:重载:
function Add( x, y : Integer ) : Integer;
...
function Add( s, t : String ) : String;
允许通用地编写函数或数据类型,以便它
可以相同地处理值,而不依赖于它们的类型
换句话说:泛型
例子 :
class List<T> {
class Node<T> { ...
允许编写一个函数来获取某种类型 T 的对象,
但如果传递一个属于 S 类型的对象也能正常工作
这是T的一个亚型
(最常见的用法)
例子 :
abstract class Animal {
abstract String talk();
}
class Cat extends Animal {
String talk() {
return "Meow!";
}
}
...
另一个例子 :
class Animal
{
public virtual void eat()
{
Console.Write("Animal eating");
}
}
class Dog : Animal
{
public override void eat()
{
Console.Write("Dog eating");
}
}
Great .
现在我想向您展示接口的定义:
接口- 一个接口定义了一个contract可以通过以下方式实现
类和结构。接口可以包含方法、属性、
事件和索引器。接口不提供以下实现
它定义的成员——它仅仅指定必须是的成员
由实现接口的类或结构提供。
Great.
问题:
看这个伪代码:
Dog implements IWalk {...}
Cat implements IWalk {...}
Array[IWalk] = [new Dog(),new Cat()]
foreach item in array : item.walk();
- 这是多态行为吗(对每个不同的对象调用 walk())?
恕我直言,事实并非如此。为什么 ?因为它不对应于上面提到的任何 wiki 类别。
我相信这是纯粹的编码原则,我通过不同的眼镜来看待一个对象——而不是像上面提到的 3 个范例那样创建/改变功能
我对吗 ?这是否是多态行为?