是所有面向对象原则的核心
开放扩展
封闭变化
- 面对需求,对程序的改动是在增加代码的前提下进行的
 - 实际情况下,比如一个被公共调用的类,需要根据需求更改和扩充,不应该直接更改这个类。
而应当考虑实际情况,抽象出模型,然后继承并模型并实现。 
核心思想:对抽象编程,而非对具体编程
使用抽象类去扩展方法
举例
- 比如实现 简单的 加法运算
 - 前期只是一个简单的加法计算,写一个简单的类实现加法
 - 到后期如果需要实现四则运算,这里要做的是抽象出四则运算的抽象类,里面有需要实现的是求计算结果,然后加减乘除类去继承抽象类,这样即使后期需要扩充额外的运算类,只要在此基础上增加派生类即可
 
直接更改原始类的后果
- 类如果被公共调用,那么原始的业务已经稳定下来,如果更改此类,则需要更改所有调用它的类,这增加了维护成本
 - 有些类不能被更改,比如在不知道有其他人调用的情况下,更改此类会对其他调用方造成影响
 
注意
- 如果能料想到存在的需求改动,可以考虑先抽象,越早抽象难度越低
 - 时刻抽象不是好主意,不成熟的抽象可能造成不良后果