1.7 KiB
1.7 KiB
继承的优点
- 代码共享, 减少创建类的工作量
- 提高代码的重用性
- 子类可以形似父类, 但又异于父类
- 提高代码的可扩展性
- 提高产品或项目的开放性
继承的缺点
- 继承是侵入性的
- 降低代码灵活性
- 增加耦合性
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.(所有引用基类的地方必须能透明地使用其子类的对象。)
只要父类出现的地方子类就可以出现, 且替换为子类也不会产生任何错误或异常
- 子类必须完全实现父类的方法
在类中调用其他类时务必要使用父类或接口, 如果不能使用父类或接口, 说明类的设计已经违背 LSP 原则
如果子类不能完整地实现父类的方法,或者父类的某些方法在子类中已经发生“畸变”,则建议断开父子继承关系,采用依赖、聚集、组合等关系代替继承。
- 子类可以有自己的个性
- 覆盖或实现父类的方法时输入参数可以被放大,
父类 HashMap 输入, 子类 Map 输入, 传入 HashMap, 子类的方法永远不会执行, 想要让子类方法运行, 就必须覆写父类的方法
- 覆写或实现父类的方法时输出结果可以被缩小