LSP声明类应该可以替代它们的基类,这意味着派生类和基类应该在语义上等效。
但LSP是否也适用于实现接口的类?换句话说,如果类实现的接口方法在语义上与用户期望的不同,那么这会被视为违反LSP吗?
谢谢
答案 0 :(得分:1)
没有
它仅适用于子类型。有关简要摘要,请参阅Wikipedia article。
如果您有class B
继承或扩展class A
,您应该能够class A
与class B
切换,一切都应该正常工作。接口通常用于不允许多重继承的语言中,因此当两个对象共享一个共同的行为时,实际执行所述行为的方式在两者之间是不同的,这意味着您不能互换地切换它们。
答案 1 :(得分:1)
是。接口有类似于类的“是[名词]”关系,除了名词不是具体类型,而是“形容词[形容词短语]”。如果形容词短语“能够被安全地询问它是否能够接受物品,并且能够接受物品或报告它不会”,那么任何无法安全地询问它是否可以接受物品的物体,或者回答是,但如果实际给出一个项目则行为不好,不会是由此描述的界面的合法实现。