---恢复内容开始---
在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。
1、修饰类
当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。
final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
例如,创建一个类的前提下:
1 final class person{ 2 public people(){ 3 4 } 5 } 6 7 class man extends people{ 8 9 }
结果会报错,类型man不能成为people的子类;
2、修饰方法
在使用final时,注意,只有在想明确禁止该方法在子类中被覆盖的情况下才将方法设置为final。final修饰的方法表示此方法
已经是“最后的、最终的”含义,亦即此方法不能被重写(可以重载多个final修饰的方法)。此处需要注意的一点是:因为重
写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时访问控制权限为private,将会导致子类中不能
直接继承到此方法,因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是在子类中重
新定义了新的方法。(注:类的private方法会隐式地被指定为final方法。)
public class b extends a{ public static void main(String args[]){ } public void getName(){ } } class a { private final void getName(){ } /* 因为private修饰,子类不能继承此方法,因此,子类中的getName是重新编译的,属于正常; */ public final void getName(){ } /* 因为public修饰,子类可以继承,与final矛盾,导致重写了final方法,编译错误。 */ }
3、修饰变量
final修饰变量只能被赋值一次,赋值后不再改变。
final修饰成员变量,必须初始化方法。
当函数的参数类型是final时,说明该参数是只读型,不能被更改;
1 class man{ 2 3 priavate final int i = 0; 4 5 public man(){ 6 i = 1; 7 //i等于1报错; 8 final Object obj =new Object(); 9 obj = new Object(); 10 //obj报错; 11 12 } 13 14 }
---恢复内容结束---