oop - 覆盖是否违反了开放/封闭原则?

标签 oop solid-principles open-closed-principle

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/

相关文章:

oop - 关于开放/封闭主体的困惑

java - RecyclerView的OnScrollListener是抽象类?

c++ - 无法理解 Robert Martin 的 ISP 文章中的 "contradiction"

c# - 存储库模式是否遵循 SOLID 原则?

java - 我想遵循接口(interface)隔离原则但是类是封闭的。包装器是正确的方法吗?

open-closed-principle - 开放/封闭原则是个好主意吗?

java - 检查异常是否违反开闭原则?

java - 银行类OOP接口(interface)决定

C++ cout in 方法良好的编程风格

python - 为什么 python 静态/类方法不可调用?