对于什么时候让一个类成为最终的类,有什么通用的指导原则吗?
我认为这是如果你不想让人们扩展你的课程,但这似乎有点...天真??
发布于 2012-07-31 06:12:11
正如您所注意到的,将类设为final只会阻止它被扩展。你为什么要这么做呢?
发布于 2012-07-31 06:21:54
理想情况下,您已经阅读了Josh Bloch并为完美工作的继承而设计了您的类。但是,在实践中,我(IMHO)对期末考试的答案是
你信任(或希望)别人来扩展它吗?
如果它是像String这样的超关键类,或者一些与安全相关的类,是的,一定要让它成为最终类。
如果你正在做一些非常花哨的事情,并且这个类很难正确地扩展,那么可以考虑让它成为最终的类,这取决于你期望那些使用这个类的人所具备的技能。这也取决于这是一个通用库还是一些公司/项目特定的代码,以及它是一个带有松鼠视频的网站还是一个心脏起搏器-也就是说,一个糟糕的子类会有多严重地破坏东西?
如果你不是在做任何花哨的事情,那就不要把它设为最终版本来惹恼用户。我经常咒骂Java做了像Double final这样的类。
发布于 2012-07-31 06:16:02
众所周知,继承破坏了封装。Allan Snyder在他的论文Encapsulation and inheritance in object-oriented programming languages中展示了继承时必须注意的事项。
Josua Bloch在他的书Effective Java中建议你设计并记录要继承的类,否则就禁止继承,这恰好是指Snyder已经知道的问题。
如果在某些情况下,您不确定将来如何扩展您的类,或者您根本不打算实际扩展它们,那么您可能会更好地将它们设置为最终的。您可以随时打开它们以进行扩展,但相反(尤其是如果您正在构建一个开放系统)可能是一个真正的痛苦原因,如果不是不可能的话,这取决于具体情况。
Mikhajlov和Sekerinski在他们的论文A Study of the Fragile Base Class中的研究展示了当你不恰当地使用继承时可能会遇到的一系列问题,这可能会让你更广泛地了解为什么继承可能是重要的。
https://stackoverflow.com/questions/11730352
复制相似问题