使类和成员的可访问性最小化

本文探讨了良好模块设计的重要性,特别是信息隐藏的概念及其对降低系统复杂性和提高开发效率的作用。文章详细介绍了Java中不同访问修饰符的应用场景,并强调了如何通过合理使用这些修饰符来实现有效的信息隐藏。

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

要区别设计良好的模块与设计不好的模块,最重要的因素在于,这个模块而言,是否隐藏内部数据和其他实现细节.设计良好的模块会隐藏所有的实现细节,把它的api和其他的实现清晰的隔离开来.然后模块之间只通过他们的api进行通信,
一个模块不需要知道其他模块的内部工作情况,这个概念被称为信息隐藏 information hiding
为什么要信息隐藏,大多数理由都因为一个事实,
有效解除系统各模块直接的耦合关系,可以独立开发,测试,优化,使用,理解,和修改.加快系统开发速度
信息隐藏也降低构建大型系统的风险,因为即使系统不可用,但是这些独立的模块却有可能是可用的
java提供了许多机制来协助信息隐藏
private –只有在声明该成员的顶层类内部才可以访问
package-private–该成员包内部的任何类都可以方法这个成员
protected–该成员的类的子类都可以访问这个成员
public –任何地方都可以访问这个成员
如何正确使用访问修饰符
尽可能的是每个类或成员不被外界访问
对于顶层的类(非嵌套的)类和接口,只有两种可能的访问级别 包级私有 package-private和公有的public
如果一个包级私有的顶层类或接口,只是在某一个类的内部被用到
就应该考虑使他成为唯一使用它的那个类的私有嵌套类.
只有当同一个包内的另一个类真正需要访问一个成员的时候,才应该删除private修饰.是该成员变成包级私有,如果需要经常做这样的事情,你应该检查下系统设计.
如果方法覆盖了超类一个方法,子类的额方法基本就不允许低于超类中的访问级别,特殊情形:如果一个类实现了一个接口,那么接口中的所有类方法在这个类中必须声明为公有的
实例域绝不能是共有的,如果域是非final的,或者是一个指向可变的对象的final引用,那么一旦使这个域成为公有的,就放弃了对存储这个域中的值进行限制的能力,意味着,你也放弃了这个域不可变的能力,包含公有可变域的类并不是线程安全的
同样的建议也适用于静态域,有一种例外情况,假设常量构成了子类提供的整个抽象找那个的一部分,可以通过公有的静态final域来暴露这些常量,按惯例这些域的名称由大写字母组成,单词之间用下划线个隔开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值