background image

5.

}   

6.

  

7.

public class SubClass extends ParentClass {   

8.

    /**  

9.

     * 子类无法重写(override)父类的 final

 

方法,否则编译时会报错  

10.

     */  

11.

    // public void TestFinal() {   

12.

    // System.out.println("子类--重写 final 方法");   

13.

    // }   

14.

       

15.

    public static void main(String[] args) {   

16.

        SubClass sc = new SubClass();   

17.

        sc.TestFinal();   

18.

    }   

19. }  

这里需要特殊说明的是,具有 private 访问权限的方法也可以增加 final 修饰,但是由于子类无法继承 private

方法,因此也无法重写它。编译器在处理 private 方法时,是按照 final 方法来对待的,这样可以提高该方法

被调用时的效率。不过子类仍然可以定义同父类中的 private 方法具有同样结构的方法,但是这并不会产生

 

重写的效果,而且它们之间也不存在必然联系。

最后我们再来回顾一下 final 用于类的情况。这个大家应该也很熟悉了,因为我们最常用的 String 类就是
final 的。由于 final 类不允许被继承,编译器在处理时把它的所有方法都当作 final 的,因此 final 类比普通类

拥有更高的效率。final 的类的所有方法都不能被重写,但这并不表示 final 的类的属性(变量)值也是不可

改变的,要想做到 final 类的属性值不可改变,必须给它增加 final

 

修饰,请看下面的例子:

Java

 

代码

§

1.

public final class FinalTest {   

2.

  

3.

    int i = 

10

;   

4.

  

5.

    public static void main(String[] args) {   

6.

        FinalTest ft = new FinalTest();   

7.

        ft.i = 

99

;   

8.

        System.out.println(ft.i);   

9.

    }   

10. }  

运行上面的代码试试看,结果是 99,而不是初始化时的 10  

接下来我们一起回顾一下 finally 的用法。这个就比较简单了,它只能用在 try/catch 语句中,并且附带着一个

 

语句块,表示这段语句最终总是被执行。请看下面的代码:

Java

 

代码

§

1.

public final class FinallyTest {   

2.

    public static void main(String[] args) {   

3.

        try {   

4.

            throw new NullPointerException();   

5.

        } catch (NullPointerException e) {