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