有人可以向我解释多态吗?

mut*_*y91 13 oop polymorphism

可能重复:
尝试尽可能简单地描述多态

我从来没有能够完全理解多态性是什么.有人可以用一个例子解释它是什么以及它是如何工作的?只是基础知识.

Jer*_*fin 43

也许从非计算机类比开始是最容易的.

考虑一下你是否告诉某人"去商店购买一些你最喜欢的食物作为晚餐."

如果你对一个14岁的儿子这么说,他可能会骑自行车去商店,不得不用现金支付食物,而且你要吃晚饭吃披萨.

如果你对你的妻子说,她可能会开车去商店,用卡片来支付食物,而你可能会用霞多丽吃鸡肉蓝带.

在一个程序中,事情的运作方式有点相同:你在一个相对抽象的层面上指定一些东西(去商店吃晚饭).每个对象都提供了如何实现它的具体实现,并且在许多情况下提供了它将要做什么的一些变化(例如,像上面喜欢的食物的差异).

当然,当你进行编程时,大多数都需要一个更加详细和明确的规范.一般的想法仍然是相同的.对于上述情况,你可能有一个person是这样定义的方法的基类(或接口)go to storeselect favorite foodpay for purchase.然后你就可以实现这样的,adult并且teenager每个都定义了自己的去商店的方法,选择喜欢的食物,并支付购买费用.这些方法是多态的,因为每个实现都有自己的方式来执行你给出的更高级别的命令.


小智 16

从字面上看,多态意味着"有多种形式".在编程中,如果变量可以包含多种类型的值,那么这就是一种多态性.如果函数可以处理多种类型的参数,那么它也是多态的.

面向对象的语言通过类层次结构具有多态性:对基类或接口的引用可以引用多种类型的对象,只要那些其他类型是从基类派生的.这称为亚型多态性.

泛型编程是另一种多态.通过将参数应用于类型,相同的代码位可以处理多种类型的对象.这称为参数多态.

运算符重载和类中方法的重载是另一种多态,称为ad hoc多态,因为它比参数或子类型多态更不系统.