“子类型必须可替代其基类型”
假设我已经有了Bird课程,并且:
class Parrot extends Bird {
public function Talk() {
echo 'Talk';
}
}
一只鸟不能说话,所以我无法用鸟取代鹦鹉。
这只是一个基本的例子,但通常扩展类可以比基类做得更多。我错过了什么?
答案 0 :(得分:11)
关键是鹦鹉在任何方面都应该像鸟一样行动,因此有一般计划与鸟类打交道的人不会对他们遇到的鹦鹉感到惊讶。如果鹦鹉碰巧能够说话,那也没关系,因为他们的计划不涉及让鸟儿说话。
例如,也许他们只是在他们得到的每只鸟上调用$bird->fly()
- 鹦鹉说话的能力不会破坏这种活动,所以他们的算法仍然有效。但是如果你发明了一种无法飞行的鸟(比如说是鸵鸟),那么你就违反了这个原则,它们的一般鸟类处理算法不再适用于各种鸟类。