2

“子类型必须可以替代它们的基本类型”

假设我已经有一个 Bird 课程,并且:

class Parrot extends Bird {
   public function Talk() {
     echo 'Talk';
   }
}

鸟不会说话,所以我不能用鸟代替鹦鹉。

这只是一个基本示例,但通常扩展类可以比基类做更多的事情。我错过了什么?

4

1 回答 1

11

重点是鹦鹉在所有方面都应该像鸟一样行事,这样有计划处理鸟类的人就不会对遇到的鹦鹉感到惊讶。如果鹦鹉也能说话,那也没关系,因为他们的计划不涉及让鸟说话。

例如,也许他们只是召唤$bird->fly()他们得到的每一只鸟——鹦鹉说话的能力不会干扰这种活动,所以他们的算法仍然有效。但是如果你发明了一种不会飞的鸟(比如鸵鸟),那么你就违反了这个原则,他们的通用鸟类处理算法不再适用于各种鸟类。

于 2012-01-10T08:59:58.580 回答