请举例说明" Liskov替代"设计原则无法实现?
感谢。
答案 0 :(得分:1)
可能无法实现LSP的情况是,您可能对A类有两个要求:(1)它继承B类或实现接口C,(2)它不提供B类提供的一些行为或接口C收缩它的行为。
违反Liskov替换原则的类的示例可以在.NET Framework的ReadOnlyCollection<T>
中找到,它实现ICollection<T>
但不提供Add
或{{的必需行为1}}。显然,Remove
允许添加或删除记录是没有意义的,但我怀疑它还有令人信服的理由来实施ReadOnlyCollection<T>
。
答案 1 :(得分:0)
建议您阅读circle eclipse problem。
基本上,当您向子类型添加其他条件时,LSP很难实施。
在圆圈的情况下,宽度必须等于高度的额外条件,但只知道超类eclipse的系统期望能够独立地修改它们。
请注意,如果日食在宽度或高度上没有设置器,则这不是问题。由于使用eclipse的系统无法修改它们,因此圈子不会改变日食合约。