一个圆形就是一个几何形状,判断是否继承,就是要确定你是否可以用is-a来描述类之间的关系,并使之具有意义。
    有时你必须在导出类型中添加新的接口元素,这样也就扩展了接口并创建了新的类型。这种情况我们可以描述为is-like-a(像是一个)的关系。新类型具有旧类型的借口,但是他还包含其他方法,所以你不能说他们完全相同。
    在处理类型的层次结构时,经常想把一个对象不当做他所属的特定类型来对待,而是将其当作其基类的对象来对待,这使得人们可以编写出不依赖于特定类型的代码。在几何形的例子中,方法操作的都是泛化的形状,所以这些方法都是直接对一个几何形对象发送消息,他们不用担心对象如何处理消息。
    一个面向对象程序肯定会在某处包含向上转型,因为这正是你如何将自己从必须知道确切类型中解放出来的关键。你是一个shape,我知道你可以erase()和draw()你自己,那么去做吧,但是要注意细节的正确性。doStuff()的代码给人印象深刻之处在于,不知何故,总是做了该做的。
    在实际操作中,多态可以让我不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,而这些方法通过一个抽象类或者接口来实现。
从下往上看的话,多态实际上是多个对象的抽象,对它们进行通用编码。
posted on 2007-11-22 15:15  王永庆  阅读(467)  评论(0编辑  收藏  举报