行为亚型的里氏的概念定义 可替代性的一个对象的概念;也就是说,如果S是T的子类型,那么在程序中类型T的对象可以用类型S 的对象代替而不改变该程序的任何期望属性(例如 正确性)。
假设,我们有下一个类层次结构:
- 的基础上,抽象类 - AnimalWithFur。它具有只读属性furColor,这应该在后继中被覆盖。
- 基类的后继者 - Cat,它覆盖了furColor并返回灰色。
- 猫的继任者 - 老虎,它覆盖furColor和收益剥离
然后,我们声明了一个方法,它有一个类型猫(不AnimalWithFur)的参数。向该方法发送Tiger实例会违反SOLID中的L原则吗?
重写参数类型为AnimalWithFur改变了什么? –
不,因为属性furColour在AnimalWithFur上。而且你还在用一只老虎替代一只猫,因为我必须假设,如果你考虑LSP,你代替了,你只有两种具体类型;猫和老虎。 – weston
甚至可能不关心实际定义的属性的位置,如果它改变了程序的理想属性,那么它就是LSP违例。 – weston