面向对象的核心思想之一就是封装,只把有限的方法和成员公开给别人,这也是迪米特法则的内在要求,是外部调用方对方法体内的实现细节知道得尽可能少。

如何实现封装呢?

需要使用某些关键字来限制外部对类内属性和方法的随意访问,这些关键字就是访问权限控制符

Java中的访问权限包括四个等级,权限控制严格程度由低到高,如下表所示:

访问权限控制符 任何地方 包外子类 包内 类内 说明
public YES YES YES YES 可以修饰外部类、属性、方法,表示公开的、无限制的,是访问限制最松的一级,被其修饰的类、属性和方法不仅可以被包内访问,还可以跨类、跨包访问,甚至允许跨工程访问
protected NO YES YES YES 只能修饰属性和方法,表示受保护的、有限制的,被其修饰的属性和方法能被包内及包外子类访问。注意,即使并非继承关系,protected属性和方法在同一包内也是可见的
NO NO YES YES 即无任何访问权限控制符。千万不要说成default,它并非访问权限控制符的关键字。无访问权限控制符仅对包内可见
private NO NO NO YES 只能修饰属性、方法、内部类。表示“私有的”,是访问限制最严格的一级,被其修饰的属性或方法只能在该类内部访问,子类、包内均不能访问,更不允许跨包访问

由此可见,不同的访问权限控制符对应的可见范围不同。在定义类时,要慎重思考该类、属性、内部类的访问权限,提倡严控访问范围。过于宽泛的访问访问不利于模块间解耦及未来的代码维护。假如,在代码重构时,private方法过旧,可以直接删除,且无后顾之忧。如果删除一个public的方法,是不是要谨慎又谨慎的检查是否被调用。

在定义类时,一下互联网公司常用的访问权限控制规则如下,总的原则是推荐访问控制级别从严处理

1、如果不允许外部直接用过new创建对象,构造方法必须是private;

2、工具类不允许有public或default构造方法;

3、类非static成员变量并且与子类共享,必须是protected;

4、类非static成员变量如果仅在本类使用,必须是private;

5、类static成员变量如果仅在本类使用,必须是private;

6、若是static成员变量,必须考虑是否为final;

7、类成员方法只供类内部调用,必须是private;

8、类成员方法只对继承类公开,那么限制为protected。

Java访问权限控制相关推荐

  1. java权限控制是什么_论Java访问权限控制的重要性

    人在什么面前最容易失去抵抗力? 欢迎工作一到八年的Java工程师朋友们加入Java高级交流:854630135 本群提供免费的学习指导 架构资料 以及免费的解答 不懂得问题都可以在本群提出来 之后还会 ...

  2. [THINKING IN JAVA]访问权限控制

    6 访问权限控制 6.1 包:库单元 package.import.import *.import static: 修改classpath环境变量可以将自己写的类库添加至环境变量并在任何java程序中 ...

  3. JAVA访问权限控制[zhuan]

    Java的访问权限控制修饰符,从最大权限到最小权限依次是:public.protected.包访问权限(默认,没有关键字)和private.对于类的访问权限只能是:public和包访问权限(但内部类可 ...

  4. java 访问权限控制

    java提供四种访问权限: public > protected > 包访问权限(无关键词) > private 包:库单元 对于包访问权限,一个包内的都可以访问. 在eclipse ...

  5. Java访问权限控制简述

    四种访问权限 Java中类与成员的访问权限共有四种,其中三种有访问权限修饰词:public,protected,private,. Public:权限最大,允许所有类访问,但其他包下的类想要访问需使用 ...

  6. Zookeeper基于Java 访问-权限控制的案例演示

    . 给节点赋权 List<ACL> acls=new ArrayList<>(); Id id1=new Id("digest", DigestAuthen ...

  7. java权限控制是什么_Java访问权限控制的重要性深入讲解

    前言 人在什么面前最容易失去抵抗力? 美色,算是一个,比如说西施的贡献薄就是忍辱负重.以身报国.助越灭吴:金钱,算是另外一个,我们古人常说"钱乃身外之物,生不带来死不带去",但我们 ...

  8. Java访问权限之 protected详解

    摘要:     对于类的成员(包括成员变量和成员方法)而言,其能否被其他类所访问,取决于该成员的修饰词:而对于一个类而言,其能否被其他类所访问,也取决于该类的修饰词.在Java中,类成员访问权限修饰词 ...

  9. android 静态方法 构造方法,android基础-Java篇02:类和对象、构造方法、访问权限控制、重载、this关键字、static关键字...

    一.类和构造方法 (类和对象在百度百科已经有详细的介绍,这里只做简单的描述以及帮助理解:百度百科:类和对象,需要注意的是,百度百科类和对象的举例中都是C++,书写格式不要和Java混淆!) 什么是类? ...

最新文章

  1. SharePoint 2007讨论板(Discussion Board)的答复按钮变脸
  2. 被替换的项目不是替换值长度的倍数_面试官,为啥HashMap的长度是2的n次方?
  3. Chrome浏览器扩展程序的本地备份
  4. MFC中访问界面控件的两种方法
  5. 使用JAXP对XML文档进行DOM解析
  6. 如何在浏览器中增加Jupyter / ipython笔记本的单元格宽度?
  7. 腾讯上海安全团队招聘实习生
  8. linux系统 打开网页,使用Linux终端浏览网页
  9. OpenSSL 生成CA证书及终端用户证书
  10. 兜兜转转,2020已过半
  11. javaSE之异常详解(1)
  12. 年度盘点:2018云栖社区15大影响力技术团队(附100+干货博文)
  13. python 战舰_代码战争战舰受损或沉没Python
  14. hdu4215 Moles
  15. 数码博主自用五款高性价比蓝牙耳机分享,双11不想踩雷选什么蓝牙耳机好?
  16. ESP32s3-EYE ESP-IDF环境搭建Ubuntu18.04 Micropython环境搭建Pycharm 物联网
  17. Codeforces 刷水记录
  18. 为南通市2017中考数学试卷画的图
  19. 如何打造高效的团队(五)- 文化
  20. oppok5和荣耀play4tpro哪个好

热门文章

  1. poj2446(匈牙利算法)
  2. 使用C++实现Socket编程图片打包传输(修改)
  3. poj1236(强连通分量)
  4. 关于命令行窗口输入pip list出错的一些解决办法
  5. P3797 妖梦斩木棒 线段树区间合并
  6. 牛客练习赛81 小Q与彼岸花 (分块+可持久化01trie)
  7. 阶乘分解质因数[经典题组合数学枚举质因子]
  8. 微指令地址的形成方式_交换那些事儿 | 基础维护篇 IPv6地址分类及配置方法
  9. BZOJ 2134 单选错位(数学期望)【BZOJ 修复工程】
  10. CF498C Array and Operations(数论 + 最大流)