如前所述,与 Java 方法一起使用,以标记该方法不能被覆盖(对于对象范围)或隐藏(对于静态)。这允许原始开发人员创建子类无法更改的功能,这就是它提供的所有保证。final
这意味着,如果方法依赖于其他可自定义的组件(如非公共字段/方法),则最终方法的功能可能仍然是可自定义的。这很好,因为(使用多态性)它允许部分自定义。
阻止某些内容可自定义的原因有很多,包括:
性能 -- 某些编译器可以分析和优化操作,尤其是没有副作用的编译器。
获取封装的数据 -- 查看不可变对象,其中的属性是在构造时设置的,并且永远不应更改。或者从这些属性派生的计算值。一个很好的例子是Java类。String
可靠性和协定 -- 对象由基元(、 、 等) 和/或其他对象组成。并非所有适用于这些组件的操作在更大的对象中使用时都应该适用,甚至应该是合乎逻辑的。带有修饰符的方法可用于确保这一点。计数器类就是一个很好的例子。int
char
double
final
public class Counter {
private int counter = 0;
public final int count() {
return counter++;
}
public final int reset() {
return (counter = 0);
}
}
如果该方法不是 ,我们可以做这样的事情:public final int count()
final
Counter c = new Counter() {
public int count() {
super.count();
return super.count();
}
}
c.count(); // now count 2
或者像这样:
Counter c = new Counter() {
public int count() {
int lastCount = 0;
for (int i = super.count(); --i >= 0; ) {
lastCount = super.count();
}
return lastCount;
}
}
c.count(); // Now double count