Java高效编程(15):最小化类与成员的可见性
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界
判断一个组件设计得好不好,最重要的标准之一就是该组件将其内部数据和实现细节与其他组件的隔离程度。设计良好的组件应该隐藏所有的实现细节,将API与实现清晰地分离开来。这样,组件之间只能通过API进行通信,彼此不关心对方的内部工作。这种概念称为信息隐藏或封装,它是软件设计的基本原则之一。
信息隐藏的重要性体现在很多方面,其中最主要的是它可以解耦系统中的组件,使得这些组件可以独立开发、测试、优化、使用、理解和修改。这样不仅可以加快系统的开发速度,还可以让组件并行开发。此外,信息隐藏还使得维护工作变得更加轻松,因为各个组件可以独立理解和调试,不用担心对其他组件造成影响。虽然信息隐藏本身并不能提高性能,但它为性能调优提供了便利:一旦系统完成,通过分析性能瓶颈,可以对相关组件进行优化,而不会影响其他组件的正确性。
信息隐藏提高了软件的可重用性,因为松散耦合的组件往往可以在其他情景中得到重复利用。最后,信息隐藏减少了开发大型系统的风险,因为即使整个系统失败,某些独立的组件仍然可能是成功的。Java 提供了许多工具来实现信息隐藏,比如访问控制机制 [JLS, 6.6],可以用来指定类、接口和成员的可见性。
访问级别由声明的位置以及声明中的访问修饰符(如 private
、protected
和 public
)来决定。合理使用这些修饰符对于信息隐藏至关重要。
设计原则:尽可能降低可见性
一个简单的原则是:使每个类或成员的可见性尽可能低。换句话说,使用最低的访问级别,以满足软件功能需求为前提。
对于顶级(非嵌套)类和接口,只有两种可能的访问级别:包私有和公有。如果使用 public
修饰符声明顶级类或接口,那么它就是公有的,否则它就是包私有的。如果顶级类或接口可以是包私有的,就应该这么做。将其设为包私有可以使其成为实现的一部分,而不是对外公开的API的一部分,因此在后续版本中可以修改、替换或删除,而不必担心对现有客户端的影响。如果将其设为公有,则必须一直支持它,以维持兼容性。
如果包私有的顶级类或接口只被一个类使用,考虑将其作为唯一使用它的类的私有静态嵌套类。这可以将其可见性从包内所有类减少到仅为使用它的那个类。通过这样做,可以进一步降低类的可见性,使代码更易于维护和理解。
成员的访问级别
对于成员(字段、方法、嵌套类和嵌套接口),有四种可能的访问级别,按从低到高的顺序如下:
- private(私有):成员只能从声明它的类中访问。
- 示例:
public class 示例类 {private int 私有字段 = 10;private void 私有方法() {System.out
- 示例: