java权限修饰符问题——对类的修饰分析和对成员变量的修饰分析

我们应该站在更高的"维度"来分析权限修饰符,这样或许会一目了然

1.思考

假设,成员变量->外部类->包,相当于三个维度

首先,站在外部类的角度来看, 可分为外部类在相同包下和不同包下两种情况,通过对外部类以default和 public修饰来区分。

以包为外壳,分析它其中的外部类的访问权限
default class: 该类以default修饰,则和它在同一个包下的其他类都可以访问该类
public class: 该类以 public 修饰,则和它在不同包下,也包括同一包下都可以访问该类。

其次,站在成员变量的角度来看, 可分为成员变量在本类中、在非本类相同包中、在非本类不同包的子类中、在非本类不同包中的访问权限。

以外部类为外壳,来分析它其中的成员变量的访问权限

2.疑惑

(1).可能有人会说为什么不能用private和protected来修饰 class,我也在思考这个问题:
我觉得可以用类比的思维来想问题:
成员变量为private的时候,是其所在的外部类来使用,
那么如果外部类为private,则是不是应该由其所在包来使用,
但是我们最多只使用到类的级别,不会使用到包的级别,包只是一个范围。

(2).那么可能又有人说了,为啥default和public可以用,
我感觉java这么设计就是用来区分是不是在同一个包下,用两个修饰符足以区分。

(3).那可能还有人说了,怎么protected也不行,我不同包下的子类访问不可以吗?
我觉得不能这么想,当时分析成员变量的权限的时候,是分析的不同包下的子类,是从成员变量的维度->外部类->包,而我们分析外部类的权限时,应该站在比外部类高两个维度的情况下分析,也就是外部类->包->?,我们应该站在?维度来说,当外部类被protected修饰时,在相同?下,怎么怎么样,在不同?下怎么怎么样。而不是说,我分析外部类的权限,我还站在和分析成员变量一样的,包的维度来分析。

3.总结

其实吧,我感觉不用想的这么复杂,java设计者主要的想法应该还是用default和public来区分外部类在不同包的访问权限,用private、default、protected、public来区分成员变量在相同类、不同类同包,不同类不同包的访问权限。我感觉有了这层理解,再分析一些权限问题会很好理解,而不是死记。

当然,以上仅是我自己的一些思考,如有不对的地方,希望大家指正交流,再附上几个其他博主对为什么不能private和protected来修饰class的理解
https://www.cnblogs.com/AleiCui/p/12792565.html
https://www.zhihu.com/question/60501402
https://www.eolink.com/news/post/55838.html
https://zhidao.baidu.com/question/1305798964145550939.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rabbit Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值