我正在使用eclipse checkstyle插件。我在A类中有很少的方法在B类中被覆盖。我对大多数方法都有以下警告
函数
SearchAndReplace
不被认为是继承的 - 必须将其宣布为抽象或最终或将其留空。
将方法声明为final是否有任何优势?
修改
我知道关键字final是什么用途。我知道它可以防止覆盖方法,还有其他优点,比如性能还是类似的东西?
答案 0 :(得分:12)
当你声明一个方法是最终的时,你说这个方法可能没有被覆盖。
来自Java语言规范的引用:
可以将方法声明为final,以防止子类覆盖或隐藏它。
尝试覆盖或隐藏最终方法是编译时错误。
共同的口号(我相信约书亚布洛赫)是
“继承的设计和文档或其他文件禁止”
所以,除非你的意图是让子类覆盖该方法(并且可能改变超类的行为(所有方法在Java中都是virtual)),然后使方法最终。
答案 1 :(得分:4)
final
方法保证没有子类会覆盖该方法。有可能运行时可以利用这一点来获得性能提升(可能很小)。
制作方法final
的主要原因是阻止继承者覆盖该方法。这可能是一个重要的考虑因素(例如,假设一个名为bool checkSecurity()
的方法 - 让别人覆盖这个会很糟糕!)
答案 2 :(得分:0)
在Java中,final关键字应用于各种上下文:
final关键字是一个修饰符,意味着最终的类不能被扩展,一个变量不能被修改,而且一个方法也不能被覆盖。
答案 3 :(得分:0)
当一个方法声明为final时,可以安全地在构造函数中调用(除非在其中调用其他非final方法)。如果不是最终子句,则可以以试图访问子类中引入的字段的方式覆盖它。而这往往不是你所期望的。 我认为在为移动设备编写时会有一些性能优势,但我不是那里的专家。