为什么CheckStyle建议我使用最终方法?

时间:2012-03-21 09:07:14

标签: java final checkstyle

我正在使用eclipse checkstyle插件。我在A类中有很少的方法在B类中被覆盖。我对大多数方法都有以下警告

  

函数SearchAndReplace不被认为是继承的    - 必须将其宣布为抽象或最终或将其留空。

将方法声明为final是否有任何优势?

修改

我知道关键字final是什么用途。我知道它可以防止覆盖方法,还有其他优点,比如性能还是类似的东西?

4 个答案:

答案 0 :(得分:12)

当你声明一个方法是最终的时,你说这个方法可能没有被覆盖。

来自Java语言规范的引用:

  

可以将方法声明为final,以防止子类覆盖或隐藏它。

     

尝试覆盖或隐藏最终方法是编译时错误。

共同的口号(我相信约书亚布洛赫)是

继承的设计和文档或其他文件禁止

所以,除非你的意图是让子类覆盖该方法(并且可能改变超类的行为(所有方法在Java中都是virtual)),然后使方法最终。

答案 1 :(得分:4)

final方法保证没有子类会覆盖该方法。有可能运行时可以利用这一点来获得性能提升(可能很小)。

制作方法final的主要原因是阻止继承者覆盖该方法。这可能是一个重要的考虑因素(例如,假设一个名为bool checkSecurity()的方法 - 让别人覆盖这个会很糟糕!)

答案 2 :(得分:0)

  

在Java中,final关键字应用于各种上下文:

     

final关键字是一个修饰符,意味着最终的类不能被扩展,一个变量不能被修改,而且一个方法也不能被覆盖。

答案 3 :(得分:0)

当一个方法声明为final时,可以安全地在构造函数中调用(除非在其中调用其他非final方法)。如果不是最终子句,则可以以试图访问子类中引入的字段的方式覆盖它。而这往往不是你所期望的。 我认为在为移动设备编写时会有一些性能优势,但我不是那里的专家。