关键字
final
用法:
润饰一个类
public final class 类名称 {//...}
含意:以后这个类 不能有任何的子类 (太监类),肯定有父类。
因而,润饰的类,其中所有的成员办法都无奈笼罩重写(无子类),但能够本身笼罩重写父类的成员办法。
润饰一个办法
修饰符 final 返回值类型 办法名(参数列表) {// 办法体}
含意:被 final 润饰的办法为 最终办法 , 不能再被笼罩重写
对于类和办法来说,abstract 和 final 关键字 不能同时应用
润饰一个局部变量
final 数据类型 变量名 = 值;
or
final 数据类型 变量名;
变量名 = 值; // 赋值,只有保障有惟一一次赋值即可
含意:被 final 润饰的变量值,不容许更改,一次赋值,终生不变,并且不容许对曾经定义的变量名,扭转其值
int num1 = 10;
final num1 = 12; //Error!!!
不可变 :
对于根本数据类型,变量中的数据不可变
对于援用数据类型,变量中的地址值不可变
润饰一个成员变量
间接赋值:构造方法赋值:如 Person 类
private final 数据类型 成员变量名
public Person() {成员变量名 = .... ; // 此处进行赋值}
再去掉上面这个办法
public void setName() {...}
留神:
1. 因为成员变量会自带默认值,null 或者 0,也属于赋值,所以用了 final 后必须手动赋值,就不会再给默认值了。
2. 对于 final 的成员变量,要么 间接赋值 ,要么通过 构造方法赋值 (用了间接赋值,就不要用结构; 二者选一)
3. 必须保障类当中所有重载的构造方法,都最终会对 final 的成员变量进行赋值。
四种权限修饰符
public > | protected > | (default)> | private | |
---|---|---|---|---|
同一个类(我本人) | YES | YES | YES | YES |
同一个包(我街坊) | YES | YES | YES | NO |
不同包子类(我儿子) | YES | YES | NO | NO |
不同包非子类(陌生人) | YES | NO | NO | NO |
注意事项:
(default)是指不写