可以应用Liskov替换原则(php示例)吗?

dan*_*car 2 oop solid-principles

"子类型必须可替代其基类型"

假设我已经有了Bird类,并且:

class Parrot extends Bird {
   public function Talk() {
     echo 'Talk';
   }
}
Run Code Online (Sandbox Code Playgroud)

鸟不能说话,所以我无法用鸟取代鹦鹉.

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

ama*_*loy 11

关键是鹦鹉应该在各方面都像鸟一样,所以有一个有处理鸟类的计划的人不会对他们遇到的鹦鹉感到惊讶.如果鹦鹉碰巧能够说话,那也没关系,因为他们的计划不涉及让鸟儿说话.

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