封装是面向对象编程(OOP)中的基本概念之一。它描述了将数据和处理该数据的方法捆绑在一个单元中的想法,例如,Java中的一个类。
这个概念也经常用于从外部隐藏对象的内部表示或状态。这称为信息隐藏。这种机制的总体思路很简单。如果您有一个从对象外部看不到的属性,并将其与提供读取或写入访问权限的方法捆绑在一起,那么您可以隐藏特定信息并控制对对象内部状态的访问。
如果您熟悉任何面向对象的编程语言,您可能知道这些方法是 getter 和 setter 方法。顾名思义,getter 方法检索属性,setter 方法更改它。根据您实现的方法,您可以决定一个属性是否可以读取和更改,或者它是只读的,还是根本不可见。正如稍后将向您展示的,您还可以使用 setter 方法来实现额外的验证规则,以确保您的对象始终具有有效状态。
Java中的封装
这是一个如此基本的概念,以至于大多数 Java 开发人员在使用它时都没有考虑过。这只是您设计Java类的方式。您将一组存储对象当前状态的属性与使用这些属性的一组方法捆绑在一起。
该CoffeeMachine例子
例如,当创建CoffeeMachine类时,就是这样做的。属性configMap、beans、grinder和brewingUnit存储CoffeeMachine对象的当前状态。方法brewCoffee、brewEspresso、brewFilterCoffee和addBeans对这些属性实现了一组操作。
Java中的信息隐藏
正如开头所解释的,您可以使用封装概念来实现信息隐藏机制。与抽象概念类似,这是Java中最常用的机制之一。您可以在几乎所有实现良好的Java类中找到它的示例。
您可以通过使您的类属性无法从外部访问并为其他类可读或可更新的属性提供 getter 和/或 setter 方法来实现这种信息隐藏机制。
访问修饰符
Java支持四种