修饰符总结 Modifiers
函数修饰符始终在返回值类型之前!!!
变量修饰符始终在变量类型之前!!!
--------------------------------------------------------------------------------
ClassModifier: one of
Annotation public protected private
abstract static final strictfp
外部类: 不可被 protected, private, static 和 final 修饰
成员内部类: 都可以
非成员内部类: 都不可以
FieldModifier: one of
Annotation public protected private
static final transient volatile
MethodModifier: one of
Annotation public protected private
abstract static final synchronized native strictfp
ConstructorModifier: one of
Annotation public protected private
InterfaceModifier: one of
Annotation public protected private
abstract static strictfp
VariableModifier: one of
Annotation final
--------------------------------------------------------------------------------
class field method constructor interface variable
Annotation √ √ √ √ √ √
public/protected/private √ √ √ √ √ ×
abstract/strictfp √ × √ × √ ×
static √ √ √ × √ ×
final √ √ √ × × √
transient/volatile × √ × × × ×
synchronized/native × × √ × × ×
--------------------------------------------------------------------------------
Annotation
以上都可以
public/protected/private
权限修饰符, 除了 variable 都可以 ->常考
abstract/strictfp
class/interface/method
static
除了 constructor 和 variable 都可以 -> 常考
final
除了 constructor 和 interface 都可以
transient/volatile
只能修饰 field
synchronized/native
只能修饰 method
--------------------------------------------------------------------------------
final 与 abstract 是冲突的.
--------------------------------------------------------------------------------
/*
包与包之间成员和构造器的访问权限总结:
public protected 无修饰符 private
同一个类中 ok ok ok ok
同一个包中 ok ok ok
不同包子类 ok ok
不同包中 ok
不同包成员访问的前提: 被访问的类必须是 public, 且被访问的成员也必须是 public 的
不同包中的子类还可以直接访问父类中 protected 的成员和构造器
不同包访问, 有2层权限限制:
第1层是类的权限限制, 类的权限可以是 public/无权限修饰符2种
第2层是成员的权限限制, 成员的权限可以是 public/protected/无权限修饰符/private 等4种
必须类的权限允许访问, 才考虑成员的权限是否允许访问!!!
实际编程中, 访问的类一般都是不同包的:
类是 public 的, 构造器是 public 的,
允许被不同包的类创建对象; 否则禁止被不同包的类创建对象
类是 public 的, 构造器是 protected 的
只允许被不同包的类继承(就是设计来被继承的, 此时不允许被不同包的类创建对象)
类是 public 的, 构造器是 private 的(一般也是 final 的)
不允许被创建对象(包括本包的类都不行), 此时一般提供 public 方法获取类的对象
不同包中, protected 的作用就是限制成员和构造器只能被子类访问;
同一包中, protected 修饰成员变量和构造函数时没任何作用, 修饰成员函数时仅仅限于覆盖.
*/