final
1)用 final 修饰的类不能被继承,没有子类;用 final 修饰的方法不能被子类的方法覆盖;用
final 修饰的变量表示常量,只能被赋一次值。
final 不能用来修饰构造方法,父类中用 private 修饰的方法不能被子类的方法覆盖。final 方法是
不允许子类方法中写一个同样签名的方法的,但
private 的情况下,你可以定义一个同样签名的方法。(final
方法不能重载,
private 方法可以重载)
class FinalExtends {
private void goDown() {
System.out.println("hello A");
}
}
class FinalTest extends FinalExtends {
public void goDown() {
System.out.println("hello B");
}
public static void main(String[] args) {
FinalTest xx = new FinalTest();
xx.goDown();
}
}
结果为:
hello B
2)final
类
final 类不能被继承,因此 final 类的成员方法没有机会被覆盖,默认都是 final 的。在设计类时候,
如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为
final 类。
3) final
方法
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为 final
方法。 使用
final 方法的原因有
二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用
final 方法时候会转入内嵌机制,大大提高执行效率。
class Test2 {
public void f1() {
System.out.println("f1");
}
// 无法被子类覆盖的方法
public final void f2() {
System.out.println("f2");
}
public void f3() {
System.out.println("f3");
}
private void f4() {
System.out.println("f4");
}
}
public class Test1 extends Test2 {
public void f1() {
System.out.println("Test2 父类方法 f1 被覆盖!");
}
public static void main(String[] args) {