Liskov Substitution Principle是否也适用于实现接口的类?

时间:2012-10-16 18:49:03

标签: design-patterns design-principles liskov-substitution-principle

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

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

谢谢

2 个答案:

答案 0 :(得分:1)

没有

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

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

答案 1 :(得分:1)

是。接口有类似于类的“是[名词]”关系,除了名词不是具体类型,而是“形容词[形容词短语]”。如果形容词短语“能够被安全地询问它是否能够接受物品,并且能够接受物品或报告它不会”,那么任何无法安全地询问它是否可以接受物品的物体,或者回答是,但如果实际给出一个项目则行为不好,不会是由此描述的界面的合法实现。