关于外部类不能用 protected 修饰及子类访问不同包父类的 protected 成员 的一点思考
所谓访问权限控制符的作用,通俗点理解就是:控制它的作用域或者说控制可见范围。
简单的说就是:
private : 只有本包内可见,
默认(default): 只有同一包内可见
protected : 同一包内以及子类中可见
public : 任何地方都可见
问题:
一问:外部类为什么不能用 protected 修饰?
答:外部类的上一级程序单元是包,所以它只有 2 个作用域:同一个包内和任何位置。因此只需要
2 种访问权限:包访问权限和可公开访问权限,也正好对应了:省略访问控制符 和 public访问控制符。
省略访问控制符 是包权限,即同一包中其他类可以访问。也就是说它只在这个包内是可见的,在其他包内是不可见的。
protected 权限是除了本包,还多了子类可访问。但对于外部类来说,只要不是用 public 修饰,在其他包中都是不可见的,而在其他包中不可见也就无从说继承了。所以实际效果跟 省略访问控制符的效果是一样的,也就没必要用 protected 。
二问:子类如何访问不同包的父类的 protected 成员?
答:子类访问父类的 protected 成员实际上并不是 创建一个父类对象,然后用这个对象调用访问。而是用自己的实例对象访问自己的从父类那里继承来的
protected 的成员。
这么说有点绕,还可以这样说:子类访问的是自己的 prot