摘要:老夫的老夫的主页谢谢阅读那点事访问级别修饰符注本文讨论的所有情况没有考虑嵌套类。这种访问级别是范围最大的,当泥萌使用该修饰符修饰类的成员的时候,代表该成员可以被所有类访问,即整个项目下都是可以访问的。
Java那点事-访问级别修饰符老夫的gayhub
老夫的主页
谢谢阅读
注:本文讨论的所有情况没有考虑嵌套类。
Java的访问级别修饰符(Access Level Modifiers)有四种,按照可访问范围的大小排列,如下表所示(虽然官方文档也有,但是老夫知道泥萌是不会去看的_(:з)∠)_):
表格的横行列举的是四个访问范围。
修饰符 | 中文含义 | 类(class) | 包(package) | 子类(subclass) | 所有类(world) |
---|---|---|---|---|---|
public | 公有 | √ | √ | √ | √ |
protected | 保护 | √ | √ | √ | × |
无 | 缺省 | √ | √ | × | × |
private | 私有 | √ | × | × | × |
注1:缺省情况,在oracle官方文档里也被叫做package-private,我们可以理解为包-私有。
注2:为何所有类不用All Class,因为文档里就是这么写的= ̄ω ̄=。
老夫简单的介绍public、private和package-private这三种情况,重点介绍protected。
public这种访问级别是范围最大的,当泥萌使用该修饰符修饰类的成员的时候,代表该成员可以被所有类访问,即整个项目下都是可以访问的。
private与public恰好相反,它是整个访问级别中范围最小的,使用它修饰类的成员的时候,该成员只能够被该类内部访问,外部是无法访问到的。
package-private这种情况,在泥萌没有使用其他三种访问级别时生效。该修饰符所控制的范围最大是同一个包,也就是说,被修饰的成员在只需同一个包下即可被访问。
protected这种访问级别比较特殊,因为它还包含了子类也可以访问的这种情况,子类这种情况分为两种,一种是在同一个包下的子类,另一种是在不同包下的子类,这两种情况,访问被protected修饰的成员方式是不同的(这是本文今天的重点)。
直接来看代码,一目了然,代码清单如下:
项目部分包的目录结构
parent.java
package com.smallclover.pack1; public class Parent { protected void parent() { } }
Child.java(与父类在同一个包下)
package com.smallclover.pack1; public class Child extends Parent{ public void child() { Parent p = new Parent(); p.parent();//通过父类来访问 Child c = new Child(); c.parent();//通过子类来访问 } }
Child.java(与父类在不同包下)
package com.smallclover.pack2; import com.smallclover.pack1.Parent; public class Child extends Parent{ public void child() { Child c = new Child(); c.parent();//只能通过子类来访问 } }
未完待续(~o( =∩ω∩= )m)
参考文档:https://docs.oracle.com/javas...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70671.html
类的更多方面 本节介绍依赖于使用对象引用的类的更多方面以及你在前面的对象部分中了解到的点运算符。 从方法返回值 方法返回到调用它的代码。 完成方法中的所有语句。 到达return语句。 或抛出异常(稍后介绍)。 以先发生者为准。 你在方法声明中声明方法的返回类型,在方法体内,使用return语句返回值。 声明为void的任何方法都不返回值,它不需要包含return语句,但它可能会这样做,在这种...
摘要:是完全面向对象的语言,对象具有状态行为和标识。类一一是具有共同特征和行为的一类事物的统称。受保护的,对同一包内的类和所有子类可见。一种通用的内存池,用于存放所有对象。类级变量又称全局级变量或静态变量,需要使用关键字修饰。 java语言的基本特点 java语言是面向对象的高级程序设计语言,它是编译型的语言,Java语言不使用指针,并提供了自动的垃圾回收机制,使得程序员不必为内存管理而担...
摘要:没有操作符重载。最终类型在所有情况下应该是默认的,并用作为修饰符。这样就会减少现在你会在和一些第三方的中见到的那些令人困惑的历史遗留方法。在用过或是最新的之后你会觉得非常的繁琐。这是最常见的关于的吐槽,但它这就是事实。 啊哈Reddit,没了你我们还能在哪里从鱼目混珠的网络中提炼真正的精华?就在这杂乱无章的论坛中,的的确确存在着这样一些精辟的讨论。 比如有个叫Shambloroni的...
摘要:二验证验证主要是为了确保文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机的自身安全。五初始化类的初始化阶段是类加载过程的最后一步,该阶段才真正开始执行类中定义的程序代码或者说是字节码。 关注我,每天三分钟,带你轻松掌握一个Java相关知识点。 虚拟机(JVM)经常出现在我们面试中,但是工作中却很少遇到,导致很多同学没有去了解过。其实除了应付面试,作为java程序员,了解...
阅读 1084·2021-11-23 09:51
阅读 1048·2021-10-18 13:31
阅读 2922·2021-09-22 16:06
阅读 4087·2021-09-10 11:19
阅读 2149·2019-08-29 17:04
阅读 372·2019-08-29 10:55
阅读 2407·2019-08-26 16:37
阅读 3339·2019-08-26 13:29