java访问权限——protected为啥这么异常?

权限表:https://blog.****.net/lmlcode/article/details/85775890

java访问权限——protected为啥这么异常?

目录结构

|package1

----|SonDemo

|package2

----|SonDemo2

----|ParentDemo

case1: default的类不能被不同包下的类继承(将ParentDemo设为default权限时)

java访问权限——protected为啥这么异常?

case 2:同包下子类中的权限

java访问权限——protected为啥这么异常? java访问权限——protected为啥这么异常?

case 3:同包下子类中的父类实例拥有权限

java访问权限——protected为啥这么异常? java访问权限——protected为啥这么异常?

case 4:不同包下子类拥有权限

 java访问权限——protected为啥这么异常?java访问权限——protected为啥这么异常?

case 5:不同包下父类拥有权限(Question: 为什么没有protected??)

java访问权限——protected为啥这么异常?

解释:

权限是为了保证不同级别/不同需求的人能够访问 访问到其所需要的方法,访问不到其不必须的方法。一方面为了代码安全,一方面也是为了精简开发。

权限的开放基本单元是针对类来开放的。即:一个类满足某种条件下,可以调用其父类或其他类的一些方法或变量。所以不同包下的子类是可以调到父类的protected方法的(case 4)。 需要注意的是:类满足条件可以调用方法/变量,不代表类的实例可以调用自己的protected方法/变量,这也是case 5 的结果原因。

case 6: 不同包下调用实例的protected方法(其实case 5就相当于case 6,只不过父类在心中的特殊性总觉得可以调到,其实不然)

java访问权限——protected为啥这么异常?