| 本类 | 同一包下(子类,无关类) | 不同包下子类 | 不同包下无关类 | |
| public | Y | Y | Y | Y | 
| protected | Y | Y | Y | |
| 默认(default) | Y | Y | ||
| private | Y | 
默认修饰符主要用于同一个包下,protected主要用于子类
static:在有数据要共享时用static修饰。static有以下特点:
(1)被static修饰的方法,变量叫做静态方法,静态变量。
(2)被static修饰过后将脱离对象而存在,随着类加载而加载,可以直接用类名去访问。
(3)static修饰的方法里只能调用静态变量和静态方法,而普通方法既可以调用普通方法也可以调用静态方法
(4)成员变量与静态成员变量区别
| 所属关系 | 内存 | 调用方式 | 生命周期 | |
| 静态成员变量 | 属于类,也叫做类成员 | 在方法区的静态区里 | 直接用类名调用 | 随着类加载而加载,随着类消失而消失 | 
| 成员变量 | 依赖于对象,属于对象 | 在各自的堆中 | 通过对象来获取 | 和对象同步,对象消失,成员变量也就消失了 | 
final:
(1)final修饰的类变为最终类,不能被继承,不能被重写
final修饰的方法变成最终方法,不能被重写和重载
final修饰的变量变成常量,不能被修改
(2)基本数据类型被final修饰,不能修改的是值
引用数据类型被final修饰,不能修改的是地址
(3)final不能修饰构造函数。
abstract:可以修饰类,方法,修饰类变成抽象类,修饰方法变成抽象方法,没有方法体。
各个修饰符应用场景:
| 访问修饰符 | 状态修饰符 | 抽象修饰符 | |
| 类 | public,默认(内部类中可以用Private) | final | abstract | 
| 成员变量 | public,默认,protected,private | static,final | 不可以 | 
| 成员方法 | public,默认,protected,private | static,final | abstract | 
| 构造函数 | public,默认,protected,private | 不可以 | 不可以 | 
原文:https://www.cnblogs.com/520cjl1314/p/10440540.html