The open/closed principle声明一个类应该对扩展开放但对修改关闭。
我认为修改部分严格指的是改 rebase 类的源代码。但是我和有人争论说这也涉及覆盖基类的方法。
这种解释正确吗?
最佳答案
虚拟方法允许在派生类中替换基类的行为,而无需更改基类,这意味着您遵守开放/封闭原则,因为您可以扩展系统而无需修改现有代码。
然而,基类(不是纯粹抽象的)往往违反 Dependency Inversion Principle ,因为派生类依赖于基类,基类是一个具体的组件,而不是一个抽象。请记住,DIP states那:
High-level modules should [...] depend on abstractions.
除此之外,基类往往违反 Interface Segregation Principle如果他们定义了多个公共(public)(或 protected )方法,这些方法并非全部由派生类型使用。这违反了 ISP,因为:
no client should be forced to depend on methods it does not use
关于oop - 覆盖是否违反了开放/封闭原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37810994/