第6章 访问权限控制

简介:

引言:访问权限(或隐藏具体实现)与“最初的实现并不恰当”有关。

先了解两个概念:

封装(encapsulation,即隐藏对象的属性和实现细节,仅对外公开接口。

重构(Refactoring就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。

程序员分为两类,类库的消费者和类库的开发者,类库的消费者希望类库出现新版本的时候,他们并不需要改写他们的代码,而类库的开发者则必须有权限对类库进行修改和改进,而不影响客户端程序员。

这就要求我们将“变动的事物”与“保持不变的事物”区分开来。

这正是访问权限的作用所在。

1. 包:库单元

包提供了一个管理命名空间的机制。目的是将所有类成员的名称彼此隔离。

包名的命名规范参见前面的文章http://blog.csdn.net/qq_18738333/article/details/49828349

编译单元是一个带后缀名.Java的文件,编译单元内只能有一个public类,且该类的名称必须与文件名相同。编译一个.java文件,其中的每个类都会生成一个后缀名为.class的文件。

Java可运行程序是一组可以打包并压缩为一个Java文档文件(JAR,使用Javajar生成器)的.class文件。Java解释器负责对这些文件的寻找、装载和解释

类库是一组类文件,每个文件都有一个public类,以及任意数量的非public文件,用关键字package组合到一起。

package语句必须作为文件的第一个非注释语句出现,表明该编译单元是某个类库的一部分,但使用一个类库时,必须用import语句导入。

需要记住:packageimport语句关键字允许你做的,是将单一的全局名字空间分割开,使得无论多少人在使用InternetJava编写类,都不会出现名称冲突的问题。

2. Java访问权限修饰词

1. 包访问权限

2. public:接口访问权限

3. protect:继承访问权限

4. private:私有

获得访问权限的方法有这些:

(1) 使成员成为“public”(公共的)。这样所有人从任何地方都可以访问它。

(2) 舍弃所有访问指示符,并将其类置于相同的包内。这样一来,包内的其他类就可以访问成员。

(3) 继承的类既可以访问一个protected成员,也可以访问一个public成员(但不可访问private成员)。

(4) 提供“访问器(accessor)/变异器(mutator)”方法(亦称为“获取(get)/设置(set)”方法),以便读取和修改值。这是OOP环境中最优雅的一种方法。

 

不多累赘,只记录需要注意的用法:

1. 默认包为包内的文件提供了包访问权限

2. 类的访问权限只有包访问权限和public两种选择。

3. 如果想控制如何创建对象,并阻止别人访问某个特定的构造器(或者全部构造器),可以使用private修饰构造器,用一个static方法控制创建对象。这就是单例模式(singleton。这是很常见的设计模式,比如游戏引擎中的导演类。

看下面这段代码

//: Lunch.java
// Demonstrates class access specifiers.
// Make a class effectively private
// with private constructors:
 
class Soup {
  private Soup() {}
  // (1) Allow creation via static method:
  public static Soup makeSoup() {
    return new Soup();
  }
  // (2) Create a static object and
  // return a reference upon request.
  // (The "Singleton" pattern):
  private static Soup ps1 = new Soup();
  public static Soup access() {
    return ps1;
  }
  public void f() {}
}
 
class Sandwich { // Uses Lunch
  void f() { new Lunch(); }
}
 
// Only one public class allowed per file:
public class Lunch {
  void test() {
    // Can't do this! Private constructor:
    //! Soup priv1 = new Soup();
    Soup priv2 = Soup.makeSoup();
    Sandwich f1 = new Sandwich();
    Soup.access().f();
  }
} ///:~


目录
相关文章
|
机器学习/深度学习 人工智能 供应链
AI在各行业的具体应用与未来展望
人工智能(Artificial Intelligence, AI)作为一项颠覆性技术,正在逐步改变我们的生活和工作方式。从语音助手到自动驾驶汽车,AI的应用已经深入到各个领域。本文将详细探讨AI在不同行业中的具体应用,以及未来可能的发展方向。
3236 6
|
负载均衡 算法 搜索推荐
一文了解分布式一致性算法EPaxos
分布式系统一个核心的问题就是数据的一致性。Paxos算法是分布式一致性中的经典算法,用来解决一个分布式系统如何就某个值(决议)达成一致的问题。本文从Paxos的问题引出EPaxos,介绍EPaxos的基本概念与直观理解。阅读本文需要一些Paxos或Raft等分布式一致性算法背景。
5233 0
一文了解分布式一致性算法EPaxos
|
Java 容器 数据库连接
《Java EE 7精粹》—— 2.4 异步支持
服务器端的资源是昂贵的,应谨慎使用。试想一个Servlet不得不等待的场景:连接池中提供一个有效的JDBC连接,接收JMS消息或从文件系统中读取资源。等待“长时间运行”的过程完全返回,阻塞了线程(等待,坐着,什么也不做),服务器资源没有得到最佳的使用。
1274 0
|
4天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
3天前
|
云安全 人工智能 自然语言处理
阿里云x硅基流动:AI安全护栏助力构建可信模型生态
阿里云AI安全护栏:大模型的“智能过滤系统”。
|
3天前
|
人工智能 自然语言处理 自动驾驶
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
|
4天前
|
Linux 虚拟化 iOS开发
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
942 4
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
|
6天前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
603 2