Java修饰符的权限,即:private < default < protected <public
同类 同包 子类 所有类
* private √
* default √ √
* protected √ √ √
* public √ √ √ √
private 、 protected 、public我们先不讨论其访问,我们着重讨论default的访问权限。
如果没有修饰符Java就将它默认是default类型的成员变量,如:int age; 。如果加了default则编译时会报错。
按照权限修饰符的定义,default型的成员变量是不能够在子类中被访问的,但是,事实上是不是如此呢?其实不然,这里缺少了一个限制条件,那就是子类和父类不在同一包中时,default型的成员变量是不能够在子类中被访问。即是说,如果子类和父类在同一包中,那么父类的default型的成员变量是能够被子类访问的。
所以在进行权限判断的时候,要先判断是不是同类,再判断是不是同包,再判断是不是子类。如果满足条件即可访问,不用再往后判断。