我知道如果一个类被声明为final,那么它的方法实际上无法被覆盖,因为它首先需要一个子类来覆盖它们。话虽这么说,我想知道这是否仍然完全相同,并且在该类的每个方法前面输入“final”。
我问这个问题的原因是,最终制作方法可能会导致其中一些方法运行得更快;我想知道的是,这个加速效益是否自动同等地存在于已被宣布为最终的类中的所有方法,或者您是否必须明确地使方法最终获得此利益。
谢谢!
答案 0 :(得分:3)
您无法扩展最终类,因此无法覆盖其方法。谈论最终的方法是不是真的有意义。
最终方法的理论速度增加是因为编译器可以在有意义的情况下内联函数。很难准确预测编译器何时会这样做,而且大多数情况下你不会注意到差异。它没有记录(或者根据我的知识),但我认为启发式将基于函数是短的,如果它在循环中使用。在这种情况下,与其包含的代码相比,函数包装器的开销将变得很大。
注意:对于使用arguments
对象的函数,无法进行内联。
在练习中,你几乎不会注意速度差异。但是如果你可以构建一个可以测量它的情况,你可以通过使类最终而不是方法来轻松测试。
编辑:FWIW,我尝试了这个,无法衡量在方法上使用final
与不使用它之间的区别。在课堂上使用final
也是一样的。 This SO answer
得出了同样的结论。