Files
Hui-s-notebook/里氏替换原则.md
2023-09-10 10:50:53 +08:00

1.7 KiB
Raw Permalink Blame History

继承的优点

  • 代码共享, 减少创建类的工作量
  • 提高代码的重用性
  • 子类可以形似父类, 但又异于父类
  • 提高代码的可扩展性
  • 提高产品或项目的开放性

继承的缺点

  • 继承是侵入性的
  • 降低代码灵活性
  • 增加耦合性

Liskov Substitution Principle

If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T,the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.(如果对每一个类型为 S 的对象 o1都有类型为 T 的对象 o2使得以 T 定义的所有程序 P 在所有的对象 o1都代换成 o2时程序 P 的行为没有发生变化,那么类型 S 是类型 T 的子类型。)

Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.(所有引用基类的地方必须能透明地使用其子类的对象。)

只要父类出现的地方子类就可以出现, 且替换为子类也不会产生任何错误或异常

  1. 子类必须完全实现父类的方法

在类中调用其他类时务必要使用父类或接口, 如果不能使用父类或接口, 说明类的设计已经违背 LSP 原则

如果子类不能完整地实现父类的方法,或者父类的某些方法在子类中已经发生“畸变”,则建议断开父子继承关系,采用依赖、聚集、组合等关系代替继承。

  1. 子类可以有自己的个性
  2. 覆盖或实现父类的方法时输入参数可以被放大,

父类 HashMap 输入, 子类 Map 输入, 传入 HashMap, 子类的方法永远不会执行, 想要让子类方法运行, 就必须覆写父类的方法

  1. 覆写或实现父类的方法时输出结果可以被缩小