将具体类设为 final 是一个好习惯吗?

问题描述

开闭原则是面向对象设计的五个 SOLID 原则之一。它指出“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭”。

但是最近大多数编程语言都通过提供诸如 final 之类的关键字来提供一种终结类的方法,以便将来不会继承它。某些语言(如 Kotlin)在默认情况下将它们的类设为 final(即选择加入开放式)。

我还阅读了一些文章,其中指出接口继承必须优先于实现继承,并具有有效的推理,例如脆弱基类问题。但是 OCP 告诉类应该对扩展开放。那么我应该考虑宣布我的课程开放吗?还是最终?一般来说,哪个是好的做法?

解决方法

我认为不会!

这背后的主要原因如下所述。

开闭原则以一种非常直接的方式攻击这一点。它说你应该设计永不改变的模块。当需求发生变化时,您可以通过添加新代码来扩展此类模块的行为,而不是通过更改已经可用的旧代码。”

所以我们可以说它是任何代码的结构格式!

,

继承只是用于实现 OCP 的技术之一。策略模式、装饰器模式、普通组合、参数多态和其他技术也可以用来实现这些目标。继承始终是一种选择,但应尽可能避免。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...