为什么要避免最后一个关键字?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (7)

在java中,是否有允许扩展非抽象类的情况?

当存在类层次结构时,它似乎总是表示错误的代码。你同意吗,为什么/为什么不呢?

提问于
用户回答回答于

我同意Jon和Kent,但是像Scott Myers一样(在Effective C ++中),我更进一步。我相信每个班级都应该是abstract,或者final。也就是说,只有任何层次结构中的叶类才真正适合直接实例化。所有其他类(即继承中的内部节点)都是“未完成的”,因此应该是abstract

通常的课程进一步扩展是没有意义的。如果类的一个方面值得扩展和/或修改,那么更简洁的方法是将一个类分成一个abstract基类和一个具体的可互换实现。

用户回答回答于

有充分的理由让你的代码保持非最终状态。许多框架,如hibernate,spring,guice,有时依赖于它们在运行时动态扩展的非final类。

例如,hibernate使用代理进行延迟关联提取。特别是当谈到AOP时,你会希望你的类非最终的,以便拦截器可以附加到它。另见SO问题

扫码关注云+社区

领取腾讯云代金券