修饰符总结 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 修饰成员变量和构造函数时没任何作用, 修饰成员函数时仅仅限于覆盖. */