一 前言

这篇文章是很基础的一文,没多大深度,对于开发人员必然是熟练于心。本篇文章的主题是为什么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. Java设计模式之鸭子模式

    这两天在看HeadFirst设计模式,第一种鸭子模式都不太理解.后来在百度知道上看了某大神的解释 明白了不少. 列出如下: 假设我们需要设计出各种各样的鸭子,一边游泳戏水, 一边呱呱叫.很明显这时我们 ...

  2. 剑指Offer-27.字符串的排列(C++/Java)

    题目: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输入 ...

  3. 2019/12/1 智能硬件实验室(ROS方向)

    浅谈安装ubuntu与ros感想 ubuntu 以前看电脑软件安装管家上的教程尝试在另一台电脑上安装ubuntu(虚拟机上),但是后面遇到了无法解决的问题,放弃了.这次因为选的ros方向,所以昨天在学 ...

  4. NPOI插件生成导出word文档

    因为之前没有接触NPOI过这个插件,所以几乎都是自己一边百度摸索一边学习. 这个插件对于Excel的数据导入和导出,可以说是很方便了, 但是对于导出word文档,可以说是很少的,百度了很多....也不 ...

  5. 程序员的算法课(6)-最长公共子序列(LCS)

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

  6. 【Android - IPC】之AIDL简介

    参考资料: 1.<Android开发艺术探索>第二章2.4.4 2.Android AIDL Binder框架解析:http://blog.csdn.net/lmj623565791/ar ...

  7. __dict__和dir()的区别

    __dict__和dir()的区别 dir() 一般用来查看模块的属性 __dict__从某方面上来说是dir()的子集 可以直接打印dir(),显示的是当前执行文件所有的属性 __dict__ __ ...

  8. 监控io性能、free、ps命令、查看网络状态、Linux下抓包 使用介绍

    第7周第2次课(5月8日) 课程内容: 10.6 监控io性能 10.7 free命令10.8 ps命令10.9 查看网络状态10.10 linux下抓包扩展tcp三次握手四次挥手 http://ww ...

  9. 【合集】python 的一些妙用,推导式、三元表达式、with as 等

    自己常用的内置函数 函数如下: dir len str list tuple zip map reduce(现在并入了functools中) 常用的进制转换 Oct hex bin lambda 表达 ...

  10. Swoole 是 PHP 中的 Node.js?

    一想到那些可以使用 Node 的同事,一些 PHP 开发者的脸都嫉妒绿了.异步 Node 系统可以在不同协议间共享代码库,并在代码之外提供服务.这真的想让一个人转 Node 开发.实际上 PHP 中也 ...