protected权限和default权限很容易混淆。 protected和default区别:同包下不同类可访问,不同包下不同类都不可访问(特例:protected在不同包下子类中可访问)
![](https://www.cztcode.com/wp-content/uploads/2020/03/33-1024x208.png)
- 在同一个包中,所有的类都能够访问某一个类中所有非private权限的方法或者属性。
- 一个包中的类不能通过继承访问另一个包中default权限的方法或者属性。换言之,子类在同一个包中可以访问default权限的方法或属性,子类不在同一个包中则不可以。
- 在不同包中子类是不能通过父类的实例访问protected权限的方法或者变量的,可以通过子类访问。
下面举个例子
首先使用default定义变量
![](https://www.cztcode.com/wp-content/uploads/2020/03/34.png)
这时在在另一个包中定义CZT的子类B,没有权限访问name变量
![](https://www.cztcode.com/wp-content/uploads/2020/03/35.png)
换成protected,protected与default的区别就在于,protected变量可以在不同的包中被子类访问
![](https://www.cztcode.com/wp-content/uploads/2020/03/36.png)
没有报错,一切正常
![](https://www.cztcode.com/wp-content/uploads/2020/03/37.png)
protected和default区别:同包下不同类可访问,不同包下不同类都不可访问(特例:protected在不同包下子类中可访问)