有时候,为了阻止人们利用某个类定义子类。不允许扩展的类被称为final类。可以将类声明为final类,也可以将方法设置为final方法,这样子类就不能覆盖父类的某个方法(将类声明为final类只会将其中的所有的方法声明为final方法)。
public final class A {
...
}
public class A {
...
public final String getName(){
return name;
}
}
final类的另外一个重要应用就是,防止动态绑定使计算机性能消耗太大。如果一个方法没有被覆盖并且很短,那么编译器就能对他进行优化处理,这个过程又称为内联。例如,内联调用e.getName()将被替换为访问e.name域。然而,如果getName方法在另外一个类中被覆盖,那么便一起就无法知道代码将会做什么操作,因此就不能对它进行内联处理了。