Java 修饰符是用来修饰类、变量、及方法的访问限定或类型限定,主要有以下几个:
public
,protected
,private
,default
,static
,final
,abstract
,transient
,volatile
其中前四个是访问限定修饰符,后几个为类型限定修饰符。
访问限定
访问限定:顾名思义就是用来限定类、变量及方法的访问范围,被其修饰的类、变量、或方法的访问范围如下:
范围 | private | default | protected | public |
---|---|---|---|---|
同类 | √ | √ | √ | √ |
同包中的类 | √ | √ | √ | |
同包中的类,不同包的子类 | √ | √ | ||
所有类 | √ |
也就是说,被private
修改的成员(变量、方法或类)只能被其自身访问,对其他类是不可见的,即透明的;默认修饰符修饰的成员只对同包下的类成员可见,对同包下的类的子类也是不可见的;被protected
修饰的变成对同包下的类成员可见,也对同包下的类的子类成员可见;被public
修饰的成员对任何类的成员(非静态)都是可见的。
注意:对于源文件中的顶级类,用private
修饰是没有意义的,因为这时它对所有类的成员都是不可见的,是透明的,也就是没有任何类能够获取到它的实例对象,因此,它是一个无意义的类。
类型限定
类型限定:顾名思义就是用来限定变量的类型(注意不是数据类型),被其修饰的变量有如下特性:
类 | 方法 | 变量 | |
---|---|---|---|
static | 内部类,让其可以直接实例化 | 类方法,不需要实例对象就可调用 | 类成员,所有实例对象共享 |
final | 不可继承,即没有子类 | 不可重写 | 不可修改 |
abstract | 不能实例化,即使用必继承 | 无实现,子类必须实现 | —————— |
transient | —————— | —————— | 无需序列化 |
volatile | —————— | —————— | 多线程 |