李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
访问权限控制简介
Leefs
2019-11-02 PM
5096℃
3条
# 访问权限控制简介 ### 前言 下面大家来举一个小栗子: ``` java 有一天产品经理吃饱饭后悠闲悠闲的走到你面前开始提一个需求:我现在有一个苹果,如果给我5块钱的话我让他看看这个苹果,如果给我十块钱,就让他咬一口,如果给我五十,我就决定把苹果卖给他。 ``` 这时候作为职业攻城狮的你就开始了,int a=0;if(a== 5){printf("看一眼");}else if(a==10) ...... 我也只能.....了(只能说现在探讨的并不是代码怎么写) > 我们先对需求进行一下分析 当项目上线运行的时候你发现不是一个苹果,而是n+1个苹果。 我们先对需求分一下类: | 类型名称 | 结果 | | -------- | ---------- | | A类 | 看一眼苹果 | | B类 | 咬一口苹果 | | C类 | 买一个苹果 | 首先我们根据不同的情况分成不同的类型,然后对于不同的类型将会得到不同的结果。 ### 一、访问权限简介 **思考** 首先,我们来创建一个类,该类的内部可能有成员变量、成员方法、内部类等,这时候假设我们在本类中所有的成员都可以进行相互调用,那么,接下来如果其他类想调用本类中的某个**成员**我们该怎样进行处理呢? ```java public class createClass { int a = 0; void show(){ System.out.println("Hello,小编"); } class Inner { Inner() { System.out.println("我是内部类"); } } } ``` 讨论开始了....... 小A:可以通过new一个对象出来实现调用其他类中的成员 小B:可以通过static进行修饰也可以完成 小C:通过反射也可以实现 这时候又有问题了,我本类中的有些成员涉及到敏感数据,或者是出于对安全方面的考虑,只能在我本类中进行调用,其他类不能够随便调用该方法。 这时候是不是要对这个方法做一些特殊处理,比如做一个标记,添加一个关键字,进行一下限制。 #### 1.类与类之间的关系 Java中将类与类之间的关系分为四种情况进行相应的权限限制 **情况一:**对于本类来说我自己也要有一点隐私,我只想让我本类中成员可以进行调用,禁止其他类进行调用 **情况二:**我只愿意和我该类同一个包中的其它类共享某些特定成员,不允许其它包中的类来调用 **情况三:**因为类与类之间有继承关系,子类继承了父类都是一家人要进行一下特殊的照顾,即使不在同一个包中也没关系,我给你开个后门,允许你来访问我本类中的某些特定成员 **情况四:**对于我类中的某些成员,不管它是不是和我在同一个包下,不管是不是存在继承关系我都愿意分享出去 对于以上四种不同情况,需要做上四个标记,然后分别对四个不同的类型取上四个专业点的名称,分别是**private、default(无修饰符)、protected、public** #### 2.访问权限说明 | 修饰符名称 | 作用范围 | | ------------- | ------------------------------------------------------------ | | **public** | Java语言中访问限制最宽的修饰符,一般称之为”公共的“。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包访问。 | | **protected** | 介于public和private之间的一种访问修饰符,一般称之为”保护访问权限“。被其修饰的属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。对外包的非子类是不可以访问。 | | **default** | 即不加任何访问修饰符,通常称为”默认访问权限“或者”包访问权限“。该模式下,只允许在同一个包中进行访问,外包的所有类都不能访问。 | | **private** | Java语言中对访问权限限制最窄的修饰符,一般称之为”私有的“。被其修饰的属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。 | **访问权限控制的大小情况:** ``` public > protected > default(包访问权限) > private ``` **注意事项:** > 1、所谓的访问,可以分为两种不同方式:通过对象实例访问;直接访问。 > 比如说,某父类protected权限的成员,子类是可以直接访问的,换一种说法是子类其实继承了父类的除了private成员外的所有成员,包括protected成员,所以与其说是子类访问了父类的protected成员,不如说子类访问了自己的从父类继承来的protected成员。另一方面,如果该子类与父类不在同一个包里,那么通过父类的对象实例是不能访问父类的protected成员的。 > > 2、要区分开 protected 权限、包访问权限,正确使用它们; > 当某个成员能被所有的子类继承,但不能被外包的非子类访问,就是用protected; > 当某个成员的访问权限只对同包的类开放,包括不能让外包的类继承这个成员,就用包访问权限; > > 3、使用访问权限控制的原因: > 1)使用户不要碰触那些他们不该碰触的部分; > 2)类库设计者可以更改类的内部工作的方式,而不会担心这样会对用户产生重大影响; #### 3.访问权限范围展示 | 权限 | 类内 | 同包 | 不同包子类 | 不同包非子类 | | ------------- | ----- | ----- | ---------- | ------------ | | **private** | **√** | **×** | **×** | **×** | | **default** | **√** | **√** | **×** | **×** | | **protected** | **√** | **√** | **√** | **×** | | **public** | **√** | **√** | **√** | **√** |
标签:
Java
,
Java编程思想
,
JavaSE
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/121.html
上一篇
使用.this与.new
下一篇
Thymeleaf简介
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
SpringBoot
Docker
CentOS
并发线程
二叉树
随笔
MyBatisX
MySQL
Java工具类
散列
Http
gorm
Typora
JavaWeb
Python
Beego
JavaSE
Stream流
Java阻塞队列
Tomcat
Hive
RSA加解密
SpringCloudAlibaba
Filter
锁
Linux
Quartz
Golang
Eclipse
DataWarehouse
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭