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)是指不写