首页 » 与孩子一起学编程 » 与孩子一起学编程全文在线阅读

《与孩子一起学编程》14.8 多态和继承

关灯直达底部

接下来,我们来看对象最为重要的两个方面:多态(polymorphism)和继承(inheritance)。这两个词很长很深奥,不过正是因为有这两个方面,才使得对象如此有用。我会在下面几节清楚地解释它们的含义。

多态——同一个方法,不同的行为

非常简单,多态是指对于不同的类,可以有同名的两个(或多个)方法。取决于这些方法分别应用到哪个类,它们可以有不同的行为。

例如,假设你要建立一个程序做几何题,需要计算不同形状的面积,比如三角形和正方形。你可以创建两个类,如下:

Triangle 类和 Square 类都有一个名为 getArea 的方法。所以,如果分别有这两个类的实例,如下:

>>> myTriangle = Triangle(4, 5)>>> mySquare = Square(7)

就可以使用 getArea 分别计算它们的面积:

>>> myTriangle.getArea10.0>>> mySquare.getArea49

这两个形状都使用了方法名 getArea,不过每个形状中这个方法做的工作不同。这就是一个多态的例子。

继承——向父母学习

在真实的(非编程)世界中,人们可以从他们的父母或者其他亲戚那里继承一些东西。你可以继承一些特征,比如说红头发,或者可以继承像钱和财产之类的东西。

在面向对象编程中,类可以从其他类继承属性和方法。这样就有了类的整个“家族”,这个“家族”中的每个类共享相同的属性和方法。这样一来,每次向“家族”增加新成员时就不必从头开始。

从其他类继承属性或方法的类称为派生类(derived class)或子类(subclass)。可以举一个例子来解释这个概念。

假想我们要建立一个游戏,玩家一路上可以捡起不同的东西,比如食物、钱或衣服。可以建一个类,名为 GameObjectGameObject 类有 name 等属性(例如 coin、apple 或 hat)和 pickUp 等方法(它会把硬币增加到玩家的物品集合中)。所有游戏对象都有这些共同的方法和属性。

然后,可以为硬币建立一个子类。Coin 类从 GameObject 派生。它要继承 GameObject 的属性和方法,所以 Coin 类会自动有一个 name 属性和 pickUp 方法。Coin 类还需要一个 value 属性(这个硬币价值多少)和一个 spend 方法(可以用这个硬币去买东西)。

下面来看这些类的代码: