本文共 561 字,大约阅读时间需要 1 分钟。
提到“子类”和“子类型”是不同的,替换原则只适合于子类型关系,而一般编程语言只是考虑了子类关系,子类说明了新类是继承自父类,而子类型强调的是新类具有父类一样的行为(未必是继承)。那么,什么时候才应该使用继承?那就是符合子类型关系的时候,或者一般所说的”is a"关系,你必须保证新类的行为与父类完全一致!!!在任何使用父类的场合,新类应该表现一样的行为。
经典案例:正方形是长方形的子类,但不是子类型如果让正方形当做是长方形的子类,会出现什么情况呢?我们让正方形从长方形继承,然后在它的内部设置width等于height,这样,只要width或者height被赋值,那么width和height会被同时赋值,这样就保证了正方形类中,width和height总是相等的.现在我们假设有个客户类,其中有个方法,规则是这样的,测试传人的长方形的宽度是否大于高度,如果满足就停止下来,否则就增加宽度的值.现在我们来看,如果传人的是基类长方形,这个运行的很好.根据LSP,我们把基类替换成它的子类,结果应该也是一样的,但是因为正方形类的width和height会同时赋值,这个方法没有结束的时候,条件总是不满足,也就是说,替换成子类后,程序的行为发生了变化,它不满足LSP.(里氏代换原则)
本文来自CSDN博客,转载请标明出处: