Java &引用;封装有助于确保客户端不依赖于表示的选择”;

Java &引用;封装有助于确保客户端不依赖于表示的选择”;,java,encapsulation,Java,Encapsulation,我熟悉封装的概念。然而,最近我发现了以下关于封装的陈述(根据作者的说法是正确的): 封装有助于确保客户端不依赖于表示的选择 请您给我一个提示,什么是客户和代表选择。非常感谢。作者试图解释的是,封装允许您在某些情况下修改数据的内部表示,而不会对客户端产生任何副作用。客户机可以是使用您的类的任何其他类,以及您决定在类中存储数据的表示方式的选择 例如,假设您有一个类,其中存储某个公司的员工。可能是这样的: public class Company { private List<Emplo

我熟悉封装的概念。然而,最近我发现了以下关于封装的陈述(根据作者的说法是正确的):

封装有助于确保客户端不依赖于表示的选择


请您给我一个提示,什么是客户代表选择。非常感谢。

作者试图解释的是,封装允许您在某些情况下修改数据的内部表示,而不会对客户端产生任何副作用。客户机可以是使用您的类的任何其他类,以及您决定在类中存储数据的表示方式的选择

例如,假设您有一个类,其中存储某个公司的员工。可能是这样的:

public class Company {
    private List<Employee> employees;

    public List<Employee> getEmployees() {
        return this.employees;
    }

    public Employee getEmployee(String employeeId) {
        //search for employee
    }
}
上市公司{
私人名单雇员;
公开名单{
将本文件退还给员工;
}
公共雇员getEmployee(字符串employeeId){
//搜寻雇员
}
}
将公司的员工存储在列表中,并提供两种方法,一种用于检索所有员工,另一种用于搜索给定员工。有朝一日,您会意识到,也许一个集合或映射是存储员工的更好结构,于是您决定重构代码。只要您提供了检索员工信息的方法,而不是直接访问“员工”结构,您就可以更改这些函数的实现以适应类的新定义,而您的客户机不会注意到这些更改