java基础-类成员访问权限控制
一 前言
这篇文章是很基础的一文,没多大深度,对于开发人员必然是熟练于心。本篇文章的主题是为什么java要设置类成员访问级别?其原因也很简单,就是为了面向对象的封装特性;将类成员使用不同的访问级别控制,在数据封装后,其他的类成员想要访问当前类成员,就必须要有足够的权限才能访问;这样做的目的就是我可以随意修改不想让其他类成员没有权限访问的数据,只要约定好相关的协议,不影响其他类成员访问即可;
二 权限修饰词介绍
- public 意指公有的意思,其修饰的成员权限最低,表示任何成员都可以访问;注意点是一个java源文件中只能有一个类被声明为public;
- defaut 默认级别,成员没有修饰符号,在同一个包内能被其他成员访问;
- protected 受保护的意思;表示子类能够继承父类的方法;在同一个包内被其修饰的成员,其子类能够访问;注意点是不可以修饰外部类;
- private 私有的意思;权限最高,表示只允许类内部成员可以访问;注意点是不可以修饰外部类;
| 修饰符 | 同一个类中 | 同一个包中的其他类 | 不同包的子类中 | 不同包的非子类中 |
|---|---|---|---|---|
| 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);
}
}
3.2 protected
将 星球类的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修饰的成员;

java基础-类成员访问权限控制的更多相关文章
- Java基础详解 (一)Java的类成员访问权限修饰词(以及类访问权限)
在一个类的内部,其成员(包括成员变量和成员函数)能否被其他类所访问,取决于该成员的修饰词.Java的类成员访问权限修饰词有四类:private,无(默认情况下),protected和public.其权 ...
- Java之封装与访问权限控制(一)
目录 Java之封装与访问权限控制(一) 封装的概念 访问控制符 属性私有化 Java之封装与访问权限控制(一) 对于封装的概念,我总觉得自己还是挺了解的,但是真要我说,还真说不出个啥来.我只能默默地 ...
- Java之封装与访问权限控制(二)
目录 Java之封装与访问权限控制(二) 包:库单元 import import static Java常用包 Java之封装与访问权限控制(二) 访问权限控制是具体实现的隐藏,是封装性的一部分体现. ...
- Java编程思想之六访问权限控制
访问控制(或隐藏具体实现)与"最初的实现并不恰当"有关. 访问权限控制的等级,从最大权限到最小权限依次为:public,protected,包访问权限(没有关键字)和private ...
- JAVA(2)之关于类的访问权限控制
类的成员的四种访问权限 private 只能在当前类中访问 无修饰 同一个包中的类都可以访问 protected 同一个包中的类可以访问 不同包中的子类可以访问 public 所有类都可以访问 示例代 ...
- java类成员访问权限总结(private,default,protected,public)
- 【Java_基础】Java的访问权限控制
1.类成员的访问权限控制 Java中类成员的访问权限分为四类:private,无(默认情况下),protected和public.其权限控制如下表所示: 修饰词 本类 同一个包的类 继承类 其他类 p ...
- Java基础之访问权限控制
Java基础之访问权限控制 四种访问权限 Java中类与成员的访问权限共有四种,其中三种有访问权限修饰词:public,protected,private. Public:权限最大,允许所有类访问,但 ...
- Java成员的访问权限控制
Java中的访问权限控制包含两个部分: 类的访问权限控制 类成员的访问权限控制 对类来说,访问权限控制修饰符可以是public或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以 ...
随机推荐
- Gemini.Workflow 双子工作流高级教程:数据库设计及各表作用说明
整体数据库设计,可见这一篇:Gemini.Workflow 双子工作流高级教程:数据库-设计文档 这里对各数据表进行介绍: 工作流里的设计表并不多,核心只有以下8个: 下面按照流程的顺序来介绍一下表的 ...
- 【笔记】vue+springboot前后端分离实现token登录验证和状态保存的简单实现方案
简单实现 token可用于登录验证和权限管理. 大致步骤分为: 前端登录,post用户名和密码到后端. 后端验证用户名和密码,若通过,生成一个token返回给前端. 前端拿到token用vuex和lo ...
- T1110-计算线段长度
原题链接: https://nanti.jisuanke.com/t/T1010 题目简述: 已知线段的两个端点的坐标A(Xa,Ya),B(Xb,Yb)A(X_a,Y_a),B(X_b,Y_b)A(X ...
- ctf线下赛中检测外来IP的shell脚本
该脚本可用于ctf线下赛中,用来检测攻击IP的接入,及时做出响应. #!/bin/bash #写自己队的ip ipA="172.22.60.230" ipB="172.2 ...
- Log4net 使用汇总(网络收集整理)
原帖1:http://blog.csdn.net/wanzhuan2010/article/details/7587780 原帖2:http://grim1980.blog.sohu.com/2555 ...
- 删除节点(removeChild())
remoceChild():方法将从一个给定元素里删除一个子节点: reference = element.removeChild(node); 这个方法的返回值是一个指向已经被删除的子节点的引用指针 ...
- 插入节点(appendChild())
appendChild():方法将给元素节点追加一个子节点: reference = element.appendChild(newChild); 如上所示,给定节点newChild将成为给定元素节点 ...
- 文件系统之LVM 逻辑卷管理
1. LVM介绍 LVM 是 Logical Volume Manager 的简称,中文就是逻辑卷管理. 物理卷(PV,Physical Volume):就是真正的物理硬盘或分区. 卷组(VG,Vol ...
- Scala: Case classes
Case classes are like regular classes with a few key differences which we will go over. Case classes ...
- Scrapy爬虫及案例剖析
由于互联网的极速发展,所有现在的信息处于大量堆积的状态,我们既要向外界获取大量数据,又要在大量数据中过滤无用的数据.针对我们有益的数据需要我们进行指定抓取,从而出现了现在的爬虫技术,通过爬虫技术我们可 ...