Logo
Section 1 / 11

什么是多态性?

在本课程中,将讲解多态性的概念,它是面向对象编程(OOP)的重要组成部分。

导入

什么是多态性?

在本课程中,将讲解多态性的概念,它是面向对象编程(OOP)的重要组成部分。

定义

多态性(Polymorphism)一词由两个希腊单词组合而成:Poly,意为“许多”;Morph,意为“形式”。

在面向对象编程中,*多态性* 指的是同一个对象表现出不同形式和行为的能力。

让我们来看一个自动售货机的例子。售货机内有多种商品,顾客可以购买其中任意一种。这些商品各自具有不同的属性。 这是一个多态性的示例。

Many Products
Many Products

简要介绍

假设存在一个名为 Product 的基类,Beverage、Chocolate 和 Snack 是从该基类派生出的子类。

在我们的自动售货机中,这些商品被放置在用数字标记的位置上。顾客来到机器前,通过键盘输入特定商品的位置编号。随后,机器屏幕需要告知顾客所选商品的价格。作为机器的所有者,我们已决定根据以下标准来计算各类商品的销售价格:

当然,每种商品的销售价格计算方式各不相同。因此,你无法使用单一实现。你可以为每个类分别添加方法,例如 GetChocolatePrice()、GetBeveragePrice() 等,但这会增加记忆每个方法名称的难度。如果所有具体的价格计算方法都能统一命名为 GetPrice(),岂不是更方便?这正是多态性的用武之地!

使用多态性简化操作

你只需记住一个方法名称。当你在某个对象上调用该方法时,系统会自动调用与该对象相关的具体实现。这可以通过面向对象编程中的多态性来实现。基类声明一个方法 GetPrice(),并可能提供也可能不提供具体实现。如果不提供实现,则所有派生类都拥有一个共同的方法名可使用。如果提供了实现,派生类可以继承该功能,并在需要时进行扩展。

例如,当在 Beverage 类的对象上调用 GetPrice() 方法时,该方法将显示饮料的销售价格。而当在 Chocolate 类的对象上调用同一方法时,系统将计算并显示巧克力的价格,依此类推。

多态性实现了什么?

实际上,多态性减少了开发者的重复工作量。当需要创建更多具有独特属性和行为的具体派生类时,开发者只需修改那些响应不同的代码部分,其余代码则无需改动。


到目前为止,我们已经了解了什么是多态性。在下一节课中,我们将学习如何使用继承在 OOP 中实现多态性。

继承

使用继承的多态性