
上QQ阅读APP看书,第一时间看更新
1.9.3 is-a关系
在Shape(形状)例子中,Circle(圆形)、Square(矩形)和Star(星形)都直接继承自Shape。这种关系通常被称为is-a关系,因为圆是一个形状,而矩形也是形状。当子类继承自父类时,任何父类能做的事情子类都可以做。即Circle、Square和Star都是Shape的扩展。
在图1.17中,每个对象上的名字分别代表了Circle、Start和Square对象的draw方法。当我们设计Shape系统时,这种方式对各种各样的形状进行标准化非常有帮助。如果我们约定绘制形状时只需调用draw方法,而不用管具体是什么形状。那么只要遵守这一约定,无论什么时候绘制形状,只需调用draw方法即可。这正好展示了多态性的基本概念,即绘制Circle、Star或Square是各自对象自身的职责。在如今很多软件应用(比如在绘图和文字处理应用中)中都会使用多态性概念。

图1.17 Shape继承体系图