1.单一职责
2.## 里氏替换原则
// 面向对象的豫园的三大特点是:继承、封装、多态
// 里氏替换原则就是依赖于继承、多态这两大特性
// 所有引用基类的地方必须能透明地使用其子类的对象
// 只要父类能出现的地方子类就可以出现
// 而且替换为子类也不会产生任何错误或异常
// 使用者可能根本就不需要知道是父类还是子类
// 反过来就不行了,有子类出现的地方,父类未必可行
如何符合LSP?总结一句话 —— 就是尽量不要从可实例化的父类中继承,而是要使用基于抽象类和接口的继承。就是大家都基于抽象去编程,而不要基于具体。这样也就可以实现:对扩展(基于抽象)是开放的,对变更(基于具体)是禁止的。
开发中常用判断是否是里氏替换原则的方式是单元测试:子类能通过父类的所有单元测试。