为什么“正方形不是矩形”“鸵鸟不是鸟”是违反LSP原则的例子?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在“正方形不是矩形”的例子中,正方形类Square继承自矩形类Rectangle,并重写了setWidth和setHeight方法。但在某些情况下(如reSize函数),将Rectangle对象替换为Square对象会导致逻辑错误(如死循环),因为Square的行为与Rectangle的预期不符,违反了LSP原则。在“鸵鸟不是鸟”的例子中,鸵鸟类Ostrich继承自鸟类Bird,但Bird类定义了一个飞行速度的属性,而鸵鸟不能飞行。在crossRiver函数中,当将Bird对象替换为Ostrich对象时,由于Ostrich的飞行速度为0,导致除0异常,违反了LSP原则。这表明鸟类的抽象设计不合理,飞行速度不应是鸟类统一的属性。