目录
一、概念
将方法或类声明为final,主要目的是:确保他们不会在子类中改变语义。有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写。就可以使用final关键字解决,它可以用来修饰类,类的成员,以及局部变量。
例如String类被final修饰,这意味着不允许任何人定义String的子类。即String的引用一定是一个String对象,而不可能是其他类的对象。
二、修饰范围
① 类,该类不能被继承,不能拥有子类
② 方法,不可以被覆盖,即不能被重写
③ 变量,称为常量,这些变量只能赋值一次
④ 引用类型,引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改
final Person p = new Person();
Person p2 = new Person();
//final修饰的变量p,所记录的地址值不能改变
p = p2;
//可以更改p对象中name属性值
p.name = "小明";
⑤ 成员变量,需要在创建对象前赋值,否则报错。(当没有显式赋值时,多个构造方法的均需要为其赋值,以防止该变量没有被初始化)
public class Demo {
//直接赋值
public final int m = 100;
//final修饰的成员变量,需要在创建对象前赋值,否则报错。
public final int n;
public Demo(){
// 可以在创建对象时所调用的构造方法中,为变量n赋值
n = 2019;
}
public Demo(String name){
// 每个构造方法都需要为其赋值
n = 2019;
}
}