final关键字可以用于方法吗?
8 回答
绝对地!final
关键字几乎可以应用于任何事情,在每种情况下都意味着“你不能再改变它了” 。
这就是应用于...时的含义
变量:您根本无法为变量分配新值(当然,将其呈现为常量)
方法:您不能在子类中重新实现(即覆盖)此方法
一个类:你不能定义一个子类
在每种情况下,我们只是简单地表明:一旦声明了这个东西,这就是你将看到的最后一个值(或实现)。
是的,可以将方法声明为final
. 这意味着方法不能被其子类覆盖。
可以将方法声明为 final 以防止子类覆盖或隐藏它。尝试覆盖或隐藏最终方法是编译时错误。
是的。
你可以使一个方法最终
public class A {
public static final void f() {
System.out.println("test");
}
}
使方法成为最终方法通常有两个原因
- 当一个方法是最终的,它“可能”被内联。
- 当一个方法是 final 时,该方法是不可能被覆盖的。
当然可以。使其无法覆盖。
当然,请查看Final Keyword 上的 The Final Word
public abstract class AbstractBase
{
public final void performOperation() // cannot be overridden
{
prepareForOperation();
doPerformOperation();
}
protected abstract void doPerformOperation(); // must override
}
是的。
final 方法不能被子类覆盖。这通常用于防止子类改变类的关键行为。
作为其他答案的注释。你可以使用final。在实践中,我很少看到有人使用它,我不知道为什么。
这些天我写的很多代码都是为多线程环境而设计的,我倾向于使 final 类成为不可变的(如果它是一个值类),以便它是线程安全的。
将某些方法标记为最终方法(而不是其他方法)的问题在于,您声明该方法有一些特别之处,而其他方法没有什么特别之处。根据我的经验,这很少是人们真正的意思。
如果一个类是为了继承而设计的,你需要保持它干净并保持它的小,以防止不必要的副作用。所有这一切都取决于您是为自己和团队编写代码,还是为更广泛的受众编写代码——即开源项目或商业项目的公共 API。
是的,final 关键字可用于方法。它将保持不变性。它可以防止方法之间被破坏。例如,假设 X 类的某个方法的实现假定方法 M 将以某种方式运行。将 X 或 M 声明为 final 将防止派生类重新定义 M 以导致 X 行为不正确。