最终关键字可以用于方法吗?
答案 0 :(得分:19)
绝对! final
关键字几乎可以应用于任何事物,在每种情况下都意味着“您不再需要对其进行更改”。
这是应用于......时的含义
变量:您根本无法为变量分配新值(当然,将其渲染为常量)
方法:您无法在子类中重新实现(即覆盖)此方法
一个类:您无法定义子类
在每种情况下,我们只是简单地指出:一旦声明了这个东西,这就是你将会看到的最后一个值(或实现)。
答案 1 :(得分:3)
是的,可以将方法声明为final
。这意味着一个方法不能被其子类覆盖。
来自The Java Language Specifications, Third Edition,Section 8.4.3.3:
可以将方法声明为final 防止子类覆盖或 隐藏它。这是一个编译时错误 试图覆盖或隐藏决赛 方法
有关详细信息,Writing Final Classes and Methods的The Java Tutorials页面提供了更多信息。
答案 2 :(得分:2)
是
你可以制作一个方法最终
public class A {
public static final void f() {
System.out.println("test");
}
}
制作方法最终
通常有两个原因答案 3 :(得分:1)
当然可以。无法覆盖。
答案 4 :(得分:0)
当然,请查看The Final Word on the Final Keyword
public abstract class AbstractBase
{
public final void performOperation() // cannot be overridden
{
prepareForOperation();
doPerformOperation();
}
protected abstract void doPerformOperation(); // must override
}
答案 5 :(得分:0)
是
子类不能覆盖最终方法。这通常用于防止子类改变类的关键行为。
答案 6 :(得分:0)
作为对其他答案的说明。你可以使用final。在实践中,我很少看到人们使用它,我不知道为什么。
我现在编写的很多代码都是针对多线程环境的,我倾向于使类final成为一个不可变的(如果它是一个值类),这样它就是线程安全的。
将某些方法标记为最终方法(而不是其他方法)的问题在于,您声明该方法存在一些特殊内容,而其他方法则没有什么特别之处。在我的经历中,这很少是人们真正的意思。
如果一个类是为了继承,你需要保持它的清洁并保持它小,以防止不必要的副作用。所有这些取决于您是为自己和您的团队编写代码,还是为更广泛的受众撰写代码 - 即开源项目或商业项目的公共API。
答案 7 :(得分:0)
是的,final关键字可用于方法。它将保持不变性。它可以防止方法被破坏。例如,假设类X的某些方法的实现假定方法M将以某种方式运行。将X或M声明为final将阻止派生类重新定义M,从而导致X行为不正确。