一、无继承关系
不考虑继承时,三者的访问权限如下:
本类方法 | 外部 | |
---|---|---|
private | 是 | 否 |
protected | 是 | 否 |
public | 是 | 是 |
由上表可知,protected的权限与private相同,均为可被本类方法访问,不可被外部访问。因此无继承关系时,protected可被private替代。
二、有继承关系
基类中三种保护级别经不同继承后,组合结果(在子类中获得的保护级别)如下:
由上表可知,组合结果为基类保护级别和继承方式中级别更高者。即继承只会让访问权限更严格,不会更宽松。
经继承后,不同组合结果的访问权限如下:
子类方法 | 外部 | |
---|---|---|
private | 否 | 否 |
protected | 是 | 否 |
public | 是 | 是 |
protected的意义在于,弥补了private与public之间保护程度的空缺。这使得组合结果为protected的基类方法既允许被子类访问(提高便捷性),又不破坏对其在外部的保护(不妥协保护性)。