权限修饰符定义及作用范围
缺省修饰符就是default。
情况1.在同一类中
可以看到同一类中test()方法能访问private、缺省、protected修饰的方法,那么更能访问public修饰的方法publicMethod()方法咯,即本类中方法能访问所有权限修饰符修饰的方法(这里截图不下了,只截图了三个方法)
情况2.同一个包下的其他类
必须要在同一包下(一级路径下),子包(二级路径或多级路径)或者其他不相关联包都不行,见下图
二级路径访问报错
情况3.任意包下的子类里
注意,这里强调子类
任意包当然包括子包,见下图,运行结果还是一样的(注释代码代表报错代码,不能访问)
情况4.任意包下的任意类
Zi zi = new Zi();
zi.protectedMethod(); //zi类已经extends(继承)了Fu类,但是还是不能访问,什么原因呢?
---------------------------------------------------------------------------------------------------------------------------------
扩展知识点分析
关于上图的扩展知识点重新整理一下,Fu类就是父类,Zi类就是子类
Fu类代码:
Zi类代码如下:
现在还原情况,也就是上面的扩展知识点了:
访问protected方法报错,但能访问public方法
参考该博客的情况3,也行你会想强调是子类里,test又不是子类
那我现在test继承Fu类,还是会报错哦,见下图
此时你是不是很疑惑了,不是子类里吗?
答:被protected修饰后 子类是指自己(在子类本身里访问父类)也就是在test类里面或者在Zi类 自己调用父类方法访问
扩展知识点总结:
也就是说被protected修饰的方法,只能在子类本身里面访问父类方法,不能通过在其他类里面new 子类,然后调用对象.父类方法。
但是换成public修饰符,子类本身里能访问父类方法,通过在其他类里面new 子类,然后调用对象.父类方法还是能访问,见下图
---------------------------------------------------------------------------------------------------------------------------------
最后,内容对你有帮助的话,点赞收藏吧(该Java权限修饰符知识点易忘记,建议收藏保存),若还有不懂的欢迎在评论区交流!