java 权限修饰符
java 权限修饰符共有4个
public protected default private
4个修饰符可以修饰类,方法,变量
public 在任何地方都可以访问。
protected 在本包,本类,本包子类,非本包子类可以访问。
default 本包可以访问。
private 只能在本类中访问。
比较特殊的一点是 protected 修饰
p.a
Anim.java
protected int num;
default int age;
//////////////////////////////
p.b
Cat extends Anim java
////////////////////////////////
p.c
使用protected修饰num变量说明在p.b包中 Cat对象是可以访问num的,是不能访问age变量的,那Cat对象在p.a包中是不是就可以访问age 变量呢?是不可以访问的。
那在p.c包中,Cat对象还能访问到num变量么?也是不能的。
所以用protected修饰的话,子类对protected修饰的访问权限只能在子类中有访问权限。
protected比default只是多了一个子类访问权限。
个人觉得比较容易混淆的是protected。
分两种情况说明一下:
(1)子类父类同包
protected 和 没有修饰符作用是相同的,父类和子类在同包任何地方都可以访问两者修饰的成员变量或者方法,在其他包是访问不了的。
(2)子类父类不同包
首先子类在任何地方都不能访问到default 修饰的变量或者方法,就算子类对象在父类中使用时也是不能访问的,用protected 修饰只给非同包子类下放了一个权限,即只能在子类中访问该变量或者方法。
个人觉得 protected 主要是用来管理非同包子类的访问权限的。
如果子类父类在同一个包,没有必要用protected修饰,用default就可以了,子类父类不同包就发挥它的作用了。protected修饰的只能允许在子类中访问,其他任何地方子类都访问不到。