隐藏具体实现(权限\动静结合)

本文深入探讨了在面向对象设计中如何通过访问权限控制来实现程序库与客户端代码之间的隔离,以及如何构建有效的程序库组件。重点介绍了Java的访问权限修饰词在实现这一目标中的应用,包括public、protected、包访问权限和private等不同级别,旨在指导程序库设计员在设计过程中平衡安全性与易用性。同时,文章还提及了如何利用package关键字组织程序库构件,避免全局命名冲突,并通过import关键字引入所需的类。此外,文章还涉及了构件程序库的概念、包管理以及如何通过关键字package和import来实现程序库组件的组织和访问控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在面向对象设计中,要考虑的一个基本问题是“如何将变动的事物与保持不变的事物相互隔
”。


这对程序库(library)而言尤为重要。该程序库的使用者(客户端程序员,client
programmer)必须能够信赖他所使用的那部分程序库,并且能够知道如果程序库出现了
新版本,他们并不需要改写代码。从另一个方面来说,程序库的开发者必须有权限进行修改
和改进,并确保客户代码不会因为这些改动而受到影响。


这一目标可以通过达成协定来加以实现。例如,程序库开发者必须同意在改动程序库中的
class 时不得删除任何现有方法,因为那样会破坏客户端程序员的代码。但是,与之相反的
情况会更加棘手。在有域存在的情况下,程序库开发者要怎样才能知道究竟都有哪些域已经
被客户端程序员所调用了呢?这对于方法仅为类的实现的一部分,因此并不想让客户端程序
员直接使用的情况来说同样如此。但如果程序开发者想要移除旧的实现而要添加新的实现
时,结果将会怎样呢?改动任何一个成员都有可能破坏客户端程序员的代码。于是程序库开
发者会手脚被缚,无法对任何事物进行改动。

 

为了解决这一问题,Java 提供了访问权限修饰词(access specifier)供程序库开发人员来
向客户端程序员指明哪些是可用的,哪些是不可用的。访问权限控制的等级,从最大权限到
最小权限依次为:public, protected,包访问权限 (没有关键词),和 private。根据前
述内容,你可能会认为,作为一名程序库设计员,你会尽可能将一切方法都定为 private,
而仅向客户端程序员公开你愿意让他们使用的方法。这样做是完全正确的,但是对于那些经
常使用别的语言(特别是 c语言)编写程序并在访问事物时不受任何限制的人而言,却是与
他们的直觉相违背的。你将会信服 Java的访问权限控制的价值。

 

不过,构件程序库(component library)的概念以及对于谁有权取用该程序库构件的控
制都还是不完善的。其中仍旧存在着如何将构件捆绑到一个内聚的程序库单元中的问题。对
于这一点,Java用关键字package 加以控制,而访问权限会因类是存在于一个相同的包,
还是存在于一个单独的包而受到影响。你首先要学习如何将程序库
构件置于包中,然后你就会理解访问权限修饰词的全部含义。

包(package):程序库单元

身为一名程序库设计员,很有必要牢记 package 和 import 关键字允许你做的,是将单
一的全局名字空间分割开,使得无论多少人使用 Internet并用 java编写类,都不会出现
名称冲突问题。

import  与 include

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值