clear old record
This commit is contained in:
34
里氏替换原则.md
Normal file
34
里氏替换原则.md
Normal file
@@ -0,0 +1,34 @@
|
||||
继承的优点
|
||||
|
||||
- 代码共享, 减少创建类的工作量
|
||||
- 提高代码的重用性
|
||||
- 子类可以形似父类, 但又异于父类
|
||||
- 提高代码的可扩展性
|
||||
- 提高产品或项目的开放性
|
||||
|
||||
继承的缺点
|
||||
|
||||
- 继承是侵入性的
|
||||
- 降低代码灵活性
|
||||
- 增加耦合性
|
||||
|
||||
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 原则
|
||||
|
||||
> 如果子类不能完整地实现父类的方法,或者父类的某些方法在子类中已经发生“畸变”,则建议断开父子继承关系,采用依赖、聚集、组合等关系代替继承。
|
||||
|
||||
2. 子类可以有自己的个性
|
||||
3. 覆盖或实现父类的方法时输入参数可以被放大,
|
||||
|
||||
父类 HashMap 输入, 子类 Map 输入, 传入 HashMap, 子类的方法永远不会执行, 想要让子类方法运行, 就必须覆写父类的方法
|
||||
|
||||
4. 覆写或实现父类的方法时输出结果可以被缩小
|
||||
Reference in New Issue
Block a user