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或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以 ...
随机推荐
- PostGIS 查看表属性(字段、类型、是否为空)
SELECT a.attnum, a.attname AS field, t.typname AS type ...
- 小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- IDEA连接Redis
1.创建一个Maven项目 2.在src下的pom.xml文件里,添加相关包引用 <?xml version="1.0" encoding="UTF-8" ...
- 2019-11-27:kali 2019-4中文乱码解决方法
1.更换阿里源 vim /etc/apt/soul,编辑源之后,apt-get updata && apt-get upgrade && apt-get clean , ...
- vue通过控制boolean值来决定是否添加class类名
vue通过控制boolean值来决定是否添加class类名
- 附011.Kubernetes-DNS及搭建
一 Kubernetes DNS介绍 1.1 Kubernetes DNS发展 作为服务发现机制的基本功能,在集群内需要能够通过服务名对服务进行访问,因此需要一个集群范围内的DNS服务来完成从服务名到 ...
- Git实战指南----跟着haibiscuit学Git(第一篇)
笔名: haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...
- 【JavaEE】之MyBatis的ParameterType的使用
在MyBatis的Mapper.xml文件中,参数的表示方法有两种:一种是使用 “#{XXX}” 的方式表示的,另一种是使用 “${XXX}” 的方式表示的.今天来介绍以下这两种方式的不同之处. 1. ...
- c# 窗体开发4 数据库访问技术
ADO.NET的名称起源于ADO(ACTIVEX DATA OBJECTS) USING SYSTEM; USING SYSTEM.COLLECTIONS.GENERIC; USING SYSTEM. ...
- 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(8)- 从Serial(1-bit SPI) NOR恢复启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的1-bit SPI NOR恢复启动. 在前几篇里痞子衡介绍的Boot Device都属于主动启动的 ...