Oop 能否应用Liskov替换原理(php示例)?
“子类型必须可替换为其基类型” 假设我已经有了一门鸟类课程,并且:Oop 能否应用Liskov替换原理(php示例)?,oop,solid-principles,Oop,Solid Principles,“子类型必须可替换为其基类型” 假设我已经有了一门鸟类课程,并且: class Parrot extends Bird { public function Talk() { echo 'Talk'; } } 鸟不会说话,所以我不能用鸟来代替鹦鹉 这只是一个基本示例,但通常扩展类可以做的比基类多得多。我遗漏了什么?关键是鹦鹉在所有方面都应该表现得像鸟一样,这样有计划对付鸟类的人就不会对他们遇到的鹦鹉感到惊讶。如果鹦鹉碰巧也会说话,那没关系,因为他们的计划不包括让鸟儿说话 例
class Parrot extends Bird {
public function Talk() {
echo 'Talk';
}
}
鸟不会说话,所以我不能用鸟来代替鹦鹉
这只是一个基本示例,但通常扩展类可以做的比基类多得多。我遗漏了什么?关键是鹦鹉在所有方面都应该表现得像鸟一样,这样有计划对付鸟类的人就不会对他们遇到的鹦鹉感到惊讶。如果鹦鹉碰巧也会说话,那没关系,因为他们的计划不包括让鸟儿说话 例如,也许他们只是对每一只鸟都调用
$bird->fly()
——鹦鹉的说话能力不会干扰这种活动,所以他们的算法仍然有效。但是如果你发明了一种不会飞的鸟(比如鸵鸟),那么你就违反了这个原则,他们的通用鸟类处理算法不再适用于所有种类的鸟类