一、特点
1、由于继承,方法可以重写,所以父类的功能就会被子类覆盖
2、有时候我们不想子类覆盖父类的功能,这时候我们可以使用final关键字
3、final可以修饰:类、变量,方法。
4、final修饰类,该类不能被继承
5、final修饰变量,该变量不能被修改,因为这个变量是常量了
6、final修饰方法,该方法不能被重写
二、案例分析
1 package finals; 2 /** 3 * final关键字,案例1 4 * @author zhongfg 5 * @date 2015-06-16 6 */ 7 class Fu { 8 9 public final int num = 10; 10 public final void secretMethod() { 11 System.out.println("这里是绝密文件,不能修改"); 12 } 13 14 public void show(){ 15 16 } 17 } 18 19 class Zi extends Fu { 20 21 // 报错,final修饰的方法不能重写 22 /*public void secretMethod() { 23 System.out.println("我就是要修改,怎么的"); 24 }*/ 25 26 public void show() { 27 // num = 100; 报错,final修饰的变量不能被修改 28 System.out.println(num); 29 } 30 } 31 32 public class FinalDemo { 33 34 public static void main(String[] args) { 35 36 Fu fu = new Zi(); 37 fu.secretMethod(); 38 fu.show(); 39 } 40 } 41 42 运行结果: 43 这里是绝密文件,不能修改 44 10
1 package finals; 2 /** 3 * 面试题:final修饰局部变量问题 4 * 基本类型: 5 * 基本类型的值不能改变 6 * 引用类型: 7 * 引用类型的地址值不能改变,但是该对象的堆内存地址值可以改变 8 * @author zhongf 9 * @date 2015-06-16 10 */ 11 class Student { 12 13 int num = 10; 14 } 15 16 public class FinalInterview { 17 18 public static void main(String[] args) { 19 20 //局部变量是基本数据类型 21 int x = 1; 22 x = 2; 23 System.out.println(x); 24 25 final int y = 3; 26 // y = 4; 报错,无法为最终变量赋值 27 System.out.println(y); 28 29 System.out.println("---------------"); 30 31 //局部变量是引用数据类型 32 Student s = new Student(); 33 s.num = 20; 34 System.out.println(s.num); 35 36 final Student ss = new Student(); 37 ss.num = 30; 38 System.out.println(ss.num); 39 40 // ss = new Student(); 报错,无法为最终变量赋值 41 } 42 } 43 44 运行结果: 45 2 46 3 47 --------------- 48 20 49 30