时间:2021-05-20
一 前言
这篇文章是很基础的一文,没多大深度,对于开发人员必然是熟练于心。本篇文章的主题是为什么java要设置类成员访问级别?其原因也很简单,就是为了面向对象的封装特性;将类成员使用不同的访问级别控制,在数据封装后,其他的类成员想要访问当前类成员,就必须要有足够的权限才能访问;这样做的目的就是我可以随意修改不想让其他类成员没有权限访问的数据,只要约定好相关的协议,不影响其他类成员访问即可;
二 权限修饰词介绍
修饰符 同一个类中 同一个包中的其他类 不同包的子类中 不同包的非子类中 public true true true true protected true true true default true true private true
三 具体实施
3.1 public
在com.youku1327.base.authority2 包中创建了一个星球类,有个成员是shine表示光线,对应的getShine方法使用public修改,方法意思是获得光线;
package com.youku1327.base.authority2;/** * @Author lsc * <p> 星球类 </p> */public class Planet { private String shine = "好耀眼"; public String getShine(){ return shine; }}在 com.youku1327.base.authority1 包中创建类ZSZXZ, 使用import com.youku1327.base.authority2.Planet;导入 Planet星球类;在main方法中创建星球类,调用获得光线的方法,得到输出结果是 好耀眼;验证了public权限最低,不同包之间得非子类就可以访问;
package com.youku1327.base.authority1;import com.youku1327.base.authority2.Planet;/** * @Author lsc * <p> </p> */public class ZSZXZ { public static void main(String[] args) { // 创建星球实体 Planet planet = new Planet(); // 访问公有成员 String shine = planet.getShine(); // 好耀眼 System.out.println(shine); }}将 星球类的getShine方法修饰符号改为 protected;
package com.youku1327.base.authority2;/** * @Author lsc * <p> 星球类 </p> */public class Planet { private String shine = "好耀眼"; protected String getShine(){ return shine; }}在com.youku1327.base.authority1中创建Earth类继承星球类Planet(初学者只要理解extends关键字表示继承的意思),继承的方法是 getShine方法,然后在主类中创建地球实例,调用getShine方法,实际上是调用 Planet的 getShine 方法(super.getShine(),super意指高级,表示父类 );验证了不同包的子类可以调用父类被protected修饰的成员;
package com.youku1327.base.authority1;import com.youku1327.base.authority2.Planet;/** * @Author lsc * <p> 地球类</p> */public class Earth extends Planet { @Override protected String getShine() { // 调用了父类的getShine方法 return super.getShine(); } // 执行前注释掉ZSZXZ中的main方法 public static void main(String[] args) { // 创建地球 Earth earth = new Earth(); // 好耀眼 System.out.println(earth.getShine()); }}在回去看看原来的ZSZXZ类的getShine发现报错了;验证了不同包的非子类,使用protected修饰无法访问;
3.3 default
将 Planet 星球类 的 getShine 方法的修饰符去掉,代码如下
package com.youku1327.base.authority2;/** * @Author lsc * <p> 星球类 </p> */public class Planet { private String shine = "好耀眼"; String getShine(){ return shine; }}随着发现 之前的地球类报错了,我们把整个地球类注释掉;验证了default修饰的成员不能夸包访问;
我们在 Planet 的同级包下创建Moon类,调用 Planet的getShine方法,成功执行;验证了default修饰的成员能在同一个包中被访问;
package com.youku1327.base.authority2;/** * @Author lsc * <p> </p> */public class Moon { public static void main(String[] args) { // 创建星球实体 Planet planet = new Planet(); // 访问公有成员 String shine = planet.getShine(); // 好耀眼 System.out.println(shine); }}3.4 private
将 Planet 星球类 的 getShine 方法的修饰符改为private;
package com.youku1327.base.authority2;/** * @Author lsc * <p> 星球类 </p> */public class Planet { private String shine = "好耀眼"; private String getShine(){ return shine; }}发现 之前的 的Moon类主方法中的getShine方法报错了,验证了private在同包不同类中不可以被访问;getShine() 中可以使用 shine 字段,验证了同一个类中可以使用private修饰的成员;
private String shine = "好耀眼"; private String getShine(){ return shine; }}发现 之前的 的Moon类主方法中的getShine方法报错了,验证了private在同包不同类中不可以被访问;getShine() 中可以使用 shine 字段,验证了同一个类中可以使用private修饰的成员;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java访问修饰符(访问控制符)Java通过修饰符来控制类、属性和方法的访问权限和其他功能,通常放在语句的最前端。例如:publicclassclassName
构造器作为Java类的一个特殊的成员同样可以设置关键字来控制其访问权限。在大多数情况下,我们一般把构造器设置为公有成员,即public的,在默认情况下,如果不写
今天我们来一起了解一下Java语言中的访问权限控制。在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制。考虑两个场景: 场景1:工程师A编写了一个类Cl
在Java中,所有事物都具有某种形式的访问权限控制。访问权限的控制等级从最大到最小依次为:public,protected,包访问权限(无关键词)和privat
Java中四种访问权限总结一、Java中有四种访问权限,其中三种有访问权限修饰符,分别为private、public、protected,还有一种不带任何修饰符