1、final关键字的含义
final通常意味着不可变,可以用来修饰基本类型数据,对象的引用,方法和类。
- 修饰基本类似数据时,数值不可改变
- 修饰对象引用时,该引用不可变为指向其他对象
- 修饰方法时,说明该方法不能被覆盖
- 修饰类时,该类不能被继承
2、final修饰的基本数据值不可改变
public void finalData(){
final int a = 10;
// a = 20; //会报错:无法为最终变量a分配值
System.out.println("a="+a);
}
3、final修饰的对象引用不可指向其他对象
public void finalRef(){
final Student s = new Student("张三","男");
// 会报错,无法为最终变量s分配值
// s = new Student("李四","女");
System.out.println(s.toString());
}
4、final修饰的方法不可被覆盖
public final void finalMethod(){
System.out.println("这是一个final方法,不可被覆盖");
}
//子类尝试覆盖
@Override
public void finalMethod(){
// 方法会报错:finalMethod() cannot override finalMethod;overridden method is final
System.out.println("尝试覆盖final修饰的方法");
}
但是可以被重载
public final void finalMethod(){
System.out.println("这是一个final方法,不可被覆盖");
}
public final void finalMethod(String s){
System.out.println("重载了final方法");
}
5.final修饰的类不可以有子类
public final class FinalClass{}
//下面的类定义将出现编译错误
class Sub extends FinalClass{}
总结以上三点:变量不能被重新赋值,引用不能重新指向其他对象,方法不能被重写,类不能被继承。
以上代码均托管在GitHub上面(点击这里直达)