2015-07-01 30 views
0

里氏替换原则要求里氏替代原则(LSP)与代码示例

  1. 前提条件不能在亚型得到加强。
  2. 后代不能在子类型中被削弱。
  3. 超类型的不变式必须保存在子类型中。
  4. 历史约束(“历史规则”)。对象被认为只能通过它们的方法来修改(封装)。由于子类型可能会引入超类型中不存在的方法,因此这些方法的引入可能允许超类型中不允许的子类型状态更改。历史约束禁止这一点。

任何人都可以发布违反这些要点的例子和解决这些问题的另一个例子吗?

+1

您是否检查了[此问题](http://stackoverflow.com/q/56860/4519059)或[此问题](http://stackoverflow.com/q/4428725/4519059)的答案? )。 –

+1

[也提供使用车辆的示例](http://stackoverflow.com/a/20861211/4519059);)。 –

+0

我检查了车辆的例子。我认为第一和第三条件在其中有很好的解释。但是第二条和第四条仍然不清楚。 – Sam

回答

1

你知道ICollection接口吗? 想象一下,您正在编写一个获取ICollection并通过使用其Add方法来操作它的方法,或者更好的方法是使用Clear方法 如果有人传递ReadOnlyCollection(实现ICollection),您将获得使用Add的异常。 现在你永远不会期待,因为接口定义的是好的,因此ReadOnlyCollection违反了LSP。