一 前言

这篇文章是很基础的一文,没多大深度,对于开发人员必然是熟练于心。本篇文章的主题是为什么java要设置类成员访问级别?其原因也很简单,就是为了面向对象的封装特性;将类成员使用不同的访问级别控制,在数据封装后,其他的类成员想要访问当前类成员,就必须要有足够的权限才能访问;这样做的目的就是我可以随意修改不想让其他类成员没有权限访问的数据,只要约定好相关的协议,不影响其他类成员访问即可;

二 权限修饰词介绍

  1. public 意指公有的意思,其修饰的成员权限最低,表示任何成员都可以访问;注意点是一个java源文件中只能有一个类被声明为public
  2. defaut 默认级别,成员没有修饰符号,在同一个包内能被其他成员访问;
  3. protected 受保护的意思;表示子类能够继承父类的方法;在同一个包内被其修饰的成员,其子类能够访问;注意点是不可以修饰外部类
  4. 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基础-类成员访问权限控制的更多相关文章

  1. Java基础详解 (一)Java的类成员访问权限修饰词(以及类访问权限)

    在一个类的内部,其成员(包括成员变量和成员函数)能否被其他类所访问,取决于该成员的修饰词.Java的类成员访问权限修饰词有四类:private,无(默认情况下),protected和public.其权 ...

  2. Java之封装与访问权限控制(一)

    目录 Java之封装与访问权限控制(一) 封装的概念 访问控制符 属性私有化 Java之封装与访问权限控制(一) 对于封装的概念,我总觉得自己还是挺了解的,但是真要我说,还真说不出个啥来.我只能默默地 ...

  3. Java之封装与访问权限控制(二)

    目录 Java之封装与访问权限控制(二) 包:库单元 import import static Java常用包 Java之封装与访问权限控制(二) 访问权限控制是具体实现的隐藏,是封装性的一部分体现. ...

  4. Java编程思想之六访问权限控制

    访问控制(或隐藏具体实现)与"最初的实现并不恰当"有关. 访问权限控制的等级,从最大权限到最小权限依次为:public,protected,包访问权限(没有关键字)和private ...

  5. JAVA(2)之关于类的访问权限控制

    类的成员的四种访问权限 private 只能在当前类中访问 无修饰 同一个包中的类都可以访问 protected 同一个包中的类可以访问 不同包中的子类可以访问 public 所有类都可以访问 示例代 ...

  6. java类成员访问权限总结(private,default,protected,public)

  7. 【Java_基础】Java的访问权限控制

    1.类成员的访问权限控制 Java中类成员的访问权限分为四类:private,无(默认情况下),protected和public.其权限控制如下表所示: 修饰词 本类 同一个包的类 继承类 其他类 p ...

  8. Java基础之访问权限控制

    Java基础之访问权限控制 四种访问权限 Java中类与成员的访问权限共有四种,其中三种有访问权限修饰词:public,protected,private. Public:权限最大,允许所有类访问,但 ...

  9. Java成员的访问权限控制

    Java中的访问权限控制包含两个部分: 类的访问权限控制 类成员的访问权限控制 对类来说,访问权限控制修饰符可以是public或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以 ...

随机推荐

  1. 发送html邮件a标签中的url不显示的问题

    最近做的一个项目中,需要用到邮箱激活功能,但是遇到一个问题! 问题描述:发送邮箱之后,邮箱的激活链接的href属性不见了!!! 因为我采用的是本地的地址做测试,后来用百度的链接替换我的href地址又可 ...

  2. 关闭zabbix 告警

    1. 到触发器配置界面开启Allow manual close. (可能需要在连接的模板处修改) 2. 永久关闭告警,即disable该触发器.

  3. MySQL8.0 新特性 Hash Join

    概述&背景 MySQL一直被人诟病没有实现HashJoin,最新发布的8.0.18已经带上了这个功能,令人欣喜.有时候在想,MySQL为什么一直不支持HashJoin呢?我想可能是因为MySQ ...

  4. ctf线下赛中关闭非法用户shell脚本

    linux中三类用户:根用户,虚拟用户,普通用户. 其中普通用户的UID一般介于500-6000之间. #!/bin/bash for uid in $( cat /etc/passwd | cut ...

  5. mysql中给查询出的结果集添加自增序号

    select (@i:=@i+1) i,emp.* from emp,(select @i:=0) it 按部门分组并按薪资总和从大到小排序求薪资总和第二高的部门名称和薪资总和:select c.en ...

  6. Linux权限基础

    Linux权限基础 四种权限大类 基本权限 特殊权限 隐藏权限 file ACL权限 三种基本权限 r(read) 读是基本权限,没有读权限其他的一切操作都会被限制 读 4 w(write) 写 2 ...

  7. Ubuntu18.04下搭建LNMP教程-超详细图文(Nginx+MySQL+PHP含各种解决报错问题)

     笔者最近在VM15.0上安装了Ubuntu18.,先来安装一个LNMP(Nginx+MySQL+PHP)网站服务器架构,为后续的实验做准备~    LNMP是指一组通常一起使用来运行动态网站或者服务 ...

  8. cesium添加多个geojson文件并分别控制显示和隐藏

    /*获取geojson数据*/ function get_geojson(name,h,n){ let x=document.getElementById(n); if(x.className === ...

  9. 图解leetcode —— 395. 至少有K个重复字符的最长子串

    前言: 每道题附带动态示意图,提供java.python两种语言答案,力求提供leetcode最优解. 描述: 找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不 ...

  10. AIOps产品与架构浅析【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...