3

LSP 声明类应该可以替代它们的基类,这意味着派生类和基类在语义上应该是等价的。

但是 LSP 是否也适用于实现接口的类?换句话说,如果一个类实现的接口方法在语义上与用户期望的不同,这是否会被视为违反 LSP?

谢谢

4

2 回答 2

1

它仅适用于子类型。有关简短摘要,请参阅Wikipedia 文章

如果你有一个class B继承或扩展的,class A你应该能够切换出去class Aclass B一切都应该正常工作。接口通常用于不允许多重继承的语言,因此虽然这两个对象具有共同的行为,但实际执行所述行为的方式在两者之间是不同的,这意味着您不应该能够互换地切换它们。

于 2012-10-16T18:51:03.387 回答
1

是的。接口与类一样具有“是[名词]”的关系,只是名词不是具体类型,而是“作为[形容词短语]的事物”。如果形容词短语是“能够被安全地询问它是否可以接受物品,并且能够接受物品或报告它不会”,那么任何不能安全地被问到它是否可以接受物品的对象,或者可能回答是,但如果实际给定一个项目,则表现不佳,这将不是由此描述的接口的合法实现。

于 2013-03-07T20:01:09.687 回答