1 final
常用与修饰类、方法、局部变量、成员变量
1.1 修饰类
public final class MyClass
这个类不能有任何子类,方法也就无法被覆盖重写
1.2 修饰方法
public final void method() {}
修饰的方法为最终方法,不能被子类覆盖重写
注意:对于类、方法来说,abstract和final关键字不能同时使用
1.3 修饰局部变量
final int num2 = 10;
final int num3;
num3 = 20;
赋值后无法修改,无法被再次赋值,只要保证有唯一一次赋值即可
注意:
- 对于基本类型来说,不可变指的是变量中数据不可变
- 对于引用类型,不可变指的是其中保存的地址值不可改变
Student stu1 = new Student("LC");
System.out.println(stu1);
System.out.println(stu1.getName());
stu1 = new Student("Egoist");
System.out.println(stu1.getName());
System.out.println(stu1); // 地址值改变
System.out.println("==============");
final Student stu2 = new Student("LC");
// stu2 = new Student("Egoist"); // 编译报错,其中的地址不可不改变
System.out.println(stu2.getName());
stu2.setName("Egoist");
System.out.println(stu2.getName()); // 只有地址值不可改变,地址所指的对象可变
1.4 修饰成员变量
final成员变量同样不可变
- 成员变量必须有默认值(初始值)也算赋值,所以必须手动赋值
- final的成员变量,要么直接赋值,要么通过构造方法赋值
- 必须保证类中所有重载的构造方法,都会对final的成员变量重新赋值,否则只能直接赋值
2 权限修饰符
java中有四种权限修饰符:public > protected > (default)> private
权限 | public | protected | (default) | private |
---|---|---|---|---|
同一个类(自己访问自己) | 1 | 1 | 1 | 1 |
同一个包不同类() | 1 | 1 | 1 | 0 |
不同包子类 | 1 | 1 | 0 | 0 |
不同包非子类(陌生人) | 1 | 0 | 0 | 0 |
同一个类:
同一个包:
不同包的子类:
不同包的非子类: