在给定的代码中,我们看到了两个类:`Department` 和 `Employee`,以及一个测试类 `Test`。这些类代表了面向对象编程中的概念,主要用于组织和管理公司的部门和员工信息。下面是这些知识点的详细解释:
1. **类(Class)**:
类是面向对象编程的基础,它定义了一组相关属性(数据成员)和行为(方法)。在这个例子中,`Department` 类代表了一个部门,而 `Employee` 类代表了一个员工。
2. **属性(Attributes/Fields)**:
- `Department` 类有两个属性:`depName` 表示部门名称,类型为 `String`;`lever` 表示部门级别,类型为 `int`。
- `Employee` 类有四个属性:`name` 表示员工姓名,`salary` 表示员工薪水,`count` 可能表示员工编号或未在代码中使用,`dept` 表示员工所在的部门,类型为 `Department` 对象。
3. **构造方法(Constructor)**:
- `Department` 类有两个构造方法:一个无参构造方法,一个带有部门名称和级别的构造方法,用于初始化新创建的部门对象。
- `Employee` 类也有两个构造方法:一个无参构造方法,一个带有姓名的构造方法,以及一个带有姓名和薪水的构造方法,同样用于初始化新创建的员工对象。
4. **getter 和 setter 方法**:
这些方法提供了对类属性的访问和修改。例如,`getDepName()` 和 `setDepName()` 是 `Department` 类中用来获取和设置部门名称的方法,`getLever()` 和 `setLever()` 是获取和设置部门级别的方法。`Employee` 类也具有相应的 getter 和 setter 方法。
5. **对象(Object)**:
在 `Test` 类的 `main` 方法中,我们创建了 `Department` 和 `Employee` 的实例。`d` 是一个 `Department` 对象,用 "英语" 和 1 初始化;`e` 是一个 `Employee` 对象,然后将 `d` 设置为其所属部门。
6. **方法调用(Method Invocation)**:
通过 `e.setDepts(d)`,我们将 `Department` 对象 `d` 设置为 `Employee` 对象 `e` 的部门。然后,我们使用 `e.getDepts().getLever()` 获取并打印出员工所属部门的级别。
7. **封装(Encapsulation)**:
这个代码示例体现了封装原则,因为属性(如 `depName` 和 `lever`)是私有的(`private`),只能通过公共的 getter 和 setter 方法进行访问和修改,这增加了代码的安全性和可维护性。
8. **关联关系(Association)**:
`Employee` 类中的 `dept` 属性表示员工与部门之间的关联关系,即一个员工可以属于一个部门,体现了对象之间的关联性。
9. **依赖注入(Dependency Injection)**:
`setDepts(Department a)` 方法是依赖注入的一个例子,允许在运行时将 `Department` 对象传递给 `Employee` 对象,而不是在 `Employee` 构造函数中硬编码。
通过这些类和对象的交互,我们可以构建出一个简单的公司组织结构模型,其中包含了部门和员工的管理功能。这种面向对象的设计使得代码更加模块化,易于理解和维护。