我是否有任何特殊原因要在日常编程(网络或其他方面)中宣布课程或方法最终?请提供一个应该使用它的真实示例.
顺便说一下,我问,因为我正在尝试选择一个"模糊"关键字并掌握它.
它可以防止其他程序员使用您不打算让他们执行的类.因此,不要发表评论说"不要使用这个类来做XXX",而是可以设计它,以便它们不会试图覆盖它并以这种方式滥用它.
编辑:由于请求了一个示例,我将描述一个案例,您可能会发现这个关键字很方便...说你有一个类定义了两个对象如何相互通信,比如一个监听器和通知器.监听器类显然必须允许继承,但您可能希望将通知程序类设置为final,以便必须在"has-a"关系中使用它.这样,您可以从侦听器对象中做出一些关于它们正在接收的消息的性质的假设.
否则,就可以从该类继承,做各种疯狂的事情,比如扩展消息等等.如果您不希望其他程序员这样做,那么您可以使该类最终.此外,这在广泛使用的公共API中可能更有意义,因为它还允许其他程序员容易地理解哪些类可以子类化.
另一个例子 - 假设您有一个基于缓冲区的流处理器,并且在read()/ write()方法内部,您可以维护一些有关对象当前状态的数据(即当前字节或其他内容).没有办法保证任何继承这个类的人都会在处理过程中调用super的方法 - 并且由于这样的类可能只包含一些方法,所以最好只使整个事物最终而不是每个方法.这再次强迫人们使用类"has-a",而不是"is-a",因此,可以控制您期望代码执行的方式.
我同意你的意见,因为制作一个完整的课程决赛可能是你需要在蓝色月亮中做的事情,但是如果你选择练习它,那么PHP有这种能力是很好的.
"强制执行组合而非继承"这一点相当简洁.你保证你班级的某种行为没有其他任何可以干扰的行为,正如下一节所解释的那样,它也可以带来安全上的好处.