作者|Rickyの水果摊
时间|2022年9月14日
Java 中的 成员变量/属性 有 4 种 访问修饰符,分别是 public
、protected
、default(无需添加)、private
。
不同的访问修饰符为 属性 设置了不同的 访问级别(Access Level),具体情况如下表:
访问修饰符 | 同类 | 同包 | 子类 | 不同包 |
---|---|---|---|---|
public | ✅ | ✅ | ✅ | ✅ |
protected | ✅ | ✅ | ✅ | ❌ |
default | ✅ | ✅ | ❌ | ❌ |
private | ✅ | ❌ | ❌ | ❌ |
如果把上表看成一个 A 4 ∗ 4 A_{4*4} A4∗4 的类上三角矩阵,其实还是很好记忆的。但是每次都把这个表格列出来,会有一点麻烦,博主想在此分享一些记忆方式,如果各位朋友有好的记忆方式,也欢迎在评论区内分享。
首先,我们可以把这 4 个访问修饰分为两类,public
和 private
以及 protected
和 default 。
前一类其实非常好记:由 public
修饰的属性可以被任何地方使用,而由 private
修饰的属性只能被同一个类中的成员方法使用。
关键是区分后一类, protected
和 default:
从表格上来看,两者的区别是 能否被子类访问,能被不同包下子类访问的,是 protected
,不能被 不同包下子类访问的,则是 default 。
博主在网上看到一个用于记忆的例子,感觉还不错,是这样的:我们的钱(money)是受到保护的(protected),但是我们的子女可以使用我们的钱,所以 protected
修饰的属性是可以被子类访问的。
两者与 public
相比,它们均 不能 被 不同包下 的其他类访问。
两者与 private
相比,它们均 可以 被 同包下 的其他类访问。
首先,我们创建两个包,modifier.packone
与 modifier.packtwo
。在 packone
中创建 A、B
类,在 packtwo
中创建 Test
类。
1.验证 private
访问修饰符:在 A
类中设置 4 个不同修饰符的属性,在 A
类中编写一个成员方法,可以看到 4 个属性均可被访问。
然后在 modifier-packone
(与 A
类同包)中,创建 B
类,编写测试代码,查看 4 个属性的访问权限。可以看到,同包的 B
类不能访问 private
修饰的 n4
,另外 3 个均可访问。
2.验证 public
访问修饰符:在 modifier-packtwo-Test
(与 A
类不同包)中,编写测试代码,查看 A
类中的 4 个属性。可以看到,仅有 public
修饰的 n1
允许被访问,而另外 3 个属性,不同包下的 Test
类无法访问。
3.验证 protected
和 default 访问修饰符:该内容将在学习 继承 的有关知识后补充。
学习 Java 的 第 23 天。⏰
今天主要整理了Java 中「访问修饰符」的相关内容,需要记忆和理解的东西较多,是一个小重点。
在这之后,面向对象三巨头「封装」、「继承」、「多态」将正式登场,博主也会尽力把这部分内容做好,争取用较高的质量进行总结。
今天的学习日记就到此结束了,愿与诸位朋友共勉。✊
今日摘录:
「 Sunset is drowning in the orange sea, the evening wind is falling in love」
「落日沉溺于橘色的海,晚风沦陷于赤诚的爱」
相关博客: