background image

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) {