在同包(packet)内,
类中 protected 或 default 修饰的属性或方法可以被其对象外部访问,可以被子类继承。
protected 或default 的访问级别与 public 相同。
在异包(不同的packet)内,
类中 protected 修饰的属性或方法不可以被其对象外部访问,但是可以被子类继承(继承后protected和public都可以访问了)。类中 default 修饰的属性或方法不可以被其对象外部访问,不可以被子类继承,此时default 如同 private。
所以 java 的包作用域会影响 protected 和 default 的访问限制。同包内 protected 或 default 相当于 public,异包内 protected 恢复原有的特性,而 default 则被提升为 private。
下表为Java访问控制符的含义和使用情况
类内部 | 本包 | 子类(外部内部都可以) | 外部包 | |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |