变量、代码块、构造器、方法、内部类的调用权限全析
一、变量
-
类属性(static)
① 权限修饰符:决定了可以被调用的范围
② 在本类和子类中:静态和非静态方法中都可被直接调用,不需要类名引用
③ 其它类:需要实例化或通过对象引用 -
实例属性
① 权限修饰符:决定了可以被调用的范围
② 在本类和子类:非静态方法中,可以被直接调用 静态方法中,不能被直接调用,需要实例化之后,再通过“ 对象 . 实例属性 ”的方式调用
③ 其它类:需要实例化或通过对象引用
④ 实例属性也叫做实例变量,随着对象的创建,实例变量的值也就确定了 -
局部变量
① 不能被权限修饰符修饰
② 不能被static修饰
③ 不能在方法体外被调用,只能被方法体内调用,包括局部内部类 -
常量:
不能再被赋值。
-
注:
类属性 = 类变量;实例属性 = 成员变量;
都为属性,类属性是static的,实例属性是非static的,且尽可能private
二、代码块(只能被static修饰)
-
静态代码块:
① 随着类的加载而加载,只能执行一次
② 本类或父类:可以调用其中的静态属性和静态方法
③ 其它类:通过实例化该类,通过对象调用其中的属性和方法 -
非静态代码块:
① 随着对象的加载而加载,执行多次
② 本类或父类:可以调用其中的属性和方法
③ 其它类:通过实例化该类,通过对象调用其中的属性和方法
三、构造器
-
不能使用static、final
它就是随着类的创建而创建的
-
private:
① 只能在类的内部被调用
② 私有构造器的类不能被继承,除非该类有其它构造器
③ 外部类调用:详见我的博客内的设计模式——饿汉模式 -
protected:
外包子类内可以调用:
① 父类的public属性和public方法 ② 父类的protected属性、未被重写过的protected方法
外包非子类调用该类:
① 该类的public属性或public方法 ② 通过同包内的该类子类的对象也不可调用该类的protected属性或protected方法
-
缺省:
- 在同一个包内,和public的使用权限一样
四、方法
-
静态方法
① 权限修饰符:决定了被调用的范围
② 只能直接调用静态属性和静态方法
③ 调用非静态属性 / 非静态方法需要通过对象 -
非静态方法
① 权限修饰符:决定了被调用的范围
② 可直接调用静态和非静态的属性、方法 -
final方法不能被重写
-
方法内部不允许声明任何static类型的变量、内部类
五、内部类
-
成员内部类
① 静态成员内部类 vs 非静态成员内部类
② 调用方式详见我的博客 — — 内部类
-
局部内部类
① 不能被static修饰
② 内部不能创建任何static类型的结构
③ 随着所在结构的调用才可以被调用(所在结构有:代码块、构造器、方法)
六、类
- 只能被 public 、final修饰
- 同一个Java文件内不能有两个public类型的类
- 非public类型的类不能被不同包内的类继承
- final类不能被继承
七、接口
- 只能被public修饰