Java语言提供了很多修饰符,修饰符用于类和类的成员(构造方法、方法、数据和类一级的块),但final修饰符也可以用在方法中的局部变量上。
可以用在类上的修饰符称为类修饰符( class modifier)。
可以用在方法上的修饰符称为方法修饰符( method modifier)。
可以用在数据域上的修饰符称为数据修饰符( data modifier)。
可以用在类一级块上的修饰符称为块修饰符( block modifier)。
修饰符总结
码谱对Java修饰符可以修饰的内容进行了总结。
修饰符 | 类 | 构造方法 | 方法 | 数据 | 块 | 解释 |
---|---|---|---|---|---|---|
public | 类、构造方法、方法或数据域在任何包任何程序中都可见 | |||||
protected | 构造方法、方法或数据域在所属包中可见,或者在任何包中该类的子类中可见 | |||||
(default) | 类、构造方法、方法或数据域在所在的包中可见 | |||||
private | 构造方法、方法或数据域只在所在的类中可见 | |||||
static | 定义类方法、类数据域或静态初始化模块 | |||||
final | final类不能被继承。 final方法不能在子类中修改。final数据域是常量 | |||||
abstract | 抽象类必须被继承。抽象方法必须在具体的子类中实现 | |||||
native | 用 native修饰的方法表明它是用Java之外的语言实现的 | |||||
synchronized | 同一时间只有一个线程可以执行这个方法 | |||||
strictfp | 使用精确浮点数计算模式,保证在所有的Java虚拟机中计算 | |||||
transient | 标记实例数据域,使其不进行序列化 |
- 默认(没有修饰符)、 public、 private以及 protected等修饰符称为可见或者可访问性修饰符,因为它们给定了类,以及类的成员是如何被访问的。
- public、 private、 protected、 static、final以及 abstract也可以用于内部类。
- 默认访问没有任何修饰符与之关联。例如:
class Test{}
。
访问修饰符
修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
---|---|---|---|---|---|
public | |||||
protected | |||||
(default) | |||||
private |
protected
- 子类与基类在同一包中:被声明为
protected
的变量、方法和构造器能被同一个包中的任何其他类访问; - 子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的
protected
方法,而不能访问基类实例的protected
方法。
访问修饰符中,protected是比较难以掌握的,需要更多的场景理解。