将私有方法声明为" final"是否有优势?在Java?
如果我的理解是正确的,那么" final"修饰符确保我不能覆盖子类中的方法,因此可能使此方法在运行时更有效。一些文献说,如果它是最终的,可以内联,例如可以使方法调用更快。此外,如果声明为final,则Java运行库不必在继承层次结构中查找其他方法。
然而,私人功能不能被覆盖,所以它们是隐含的"最终"还有?以下两个声明之间是否存在差异:
private void myFun()
和
private final void myFun();
答案 0 :(得分:5)
子类不能通过设计覆盖private
方法。此外,final
关键字告诉编译器,无论访问级别如何,子类都不能覆盖方法。
由于private
已经暗示子类可能不会覆盖方法,因此将私有方法声明为final
是多余的。发表声明不会引起问题,但也不会有任何成就,因为私有自动被认为是最终的。
所有编制者都会将private
方法视为final
。编译器不允许覆盖任何private
方法。同样,所有编译器都会阻止子类覆盖final
方法。
<强>更新强>
在你的问题中,你说的是
“final”修饰符确保我无法覆盖a中的方法 子类和so使得这个方法在运行时更有效
这是一个值得怀疑的陈述。如果您声明private
方法final
,则优化将取决于您使用的编译器及其设置。这意味着 NO 。不,如果您确实声明了方法private
和final
,或仅final
,那么它的运行速度会更快。
答案 1 :(得分:4)
不,私有方法不需要final关键字。 根据定义,私人和私人决赛之间没有区别 有关更多信息,请参阅Java语言规范中的'final methods'。
答案 2 :(得分:1)
这些是Java中final
的不同含义和优点:
原始类型变量的final关键字使其无法重新分配。兴趣显而易见。
对象变量的final关键字可防止其引用被更改。
方法上的final关键字可以防止它在子类中被覆盖。在让子类看到它的同时保护超类的关键方法的功能很有用。
类上的final关键字可以防止它被另一个类扩展。大多数情况下这是一个坏主意,但标准库的许多基类都是这样的(例如java.lang.Math
,java.lang.String
,java.lang.Integer
......)
正如您所看到的,声明private
和final
的某些方法等同于将其声明为private
,因为在这两种情况下,子类都无法覆盖它。
但是,变量存在差异。实际上,声明它private
只会将其隐藏到其他类,而添加final
也会阻止其引用在当前类的代码中被更改(这将强制构造函数初始化它)。 / p>