1.案例需求
根据下图中的公司内部树形关系,完成设计,要求:
类中有 name 和 dept 两个属性,分别存储人员的名字和所属部门;
编写有参构造函数,并包含 name 和 dept 两个参数;
创建 addSub() 函数,实现为某个人添加下属;
创建 show() 函数,实现公司内部树形关系的展示。
2.案例源码
Enployee.java
import java.util.ArrayList;
import java.util.List;
public class Employee {
// 姓名
private String name;
// 职位
private String dept;
// 添加属性: 下属员工
// Add attribute: subordinates
// --- write your code here ---
private List<Employee> subordinates;
// 完成构造函数的编写
// Complete the constructor.
public Employee(String name, String dept) {
// --- write your code here ---
this.name=name;
this.dept=dept;
this.subordinates=new ArrayList<>();
}
// 添加下属方法
// Add subordinates method.
public void addSub(Employee e) {
// --- write your code here ---
this.subordinates.add(e);
}
// Do not modify the code below
public void show(int dept) {
for (int i = 0; i < dept; i++) {
System.out.print("-");
}
System.out.println(this.toString());
for (Employee e : subordinates) {
e.show(dept + 2);
}
}
@Override
public String toString() {
return "name='" + name + '\'' +
", dept='" + dept + '\'';
}
}
Main.java
public class Main {
public static void main(String[] args) {
Employee CEO = new Employee("Jason", "CEO");
Employee headSales = new Employee("Bob", "Head Sales");
Employee headMarketing = new Employee("Michel", "Head Marketing");
Employee clerkOne = new Employee("Tom", "Marketing");
Employee clerkTwo = new Employee("Jerry", "Marketing");
Employee clerkThree = new Employee("Jack", "Sales");
Employee clerkFour = new Employee("Lucy", "Sales");
CEO.addSub(headSales);
CEO.addSub(headMarketing);
headMarketing.addSub(clerkOne);
headMarketing.addSub(clerkTwo);
headSales.addSub(clerkThree);
headSales.addSub(clerkFour);
CEO.show(1);
}
}
3.技术细节
①属性:
name: 员工的姓名,类型为String。
dept: 员工所在的部门名称,类型为String。
subordinates: 用于存储该员工下属的列表(ArrayList),类型为List。
②构造函数:
构造函数接受两个参数:name和dept,用于初始化新创建的员工对象的姓名和部门信息。同时,它还会初始化一个空的subordinates列表。
③方法:
addSub(Employee e): 用于向当前员工的下属列表中添加一个员工。接受一个Employee类型的参数e,并调用ArrayList的add()方法将该员工添加到下属列表中。
④show(int dept) 方法:
该方法用于递归地展示员工及其下属的层级结构。dept参数用于控制输出时每一层的缩进量,以直观地呈现上下级关系。
首先输出当前员工的字符串表示形式(通过重写toString()方法实现)。
然后遍历下属列表,对每个下属递归调用show()方法,传入更长的dept值以便增加缩进。
⑤toString() 方法:
重写Object类的toString()方法,返回一个格式化的字符串,包含员工的姓名和所在部门信息,便于打印或显示。
4.小结
Java类Employee
用于表示公司中的一个员工,具有姓名、部门属性以及下属列表。构造函数接收员工的姓名和部门信息进行初始化,并创建一个空的下属列表。通过addSub()
方法可向当前员工添加下属。show()
方法采用递归方式展示员工及其下属的层级结构,其中dept参数控制输出时的缩进级别以反映上下级关系。同时,重写toString()
方法,方便简洁地输出员工基本信息。
Main
类的main
方法中,创建了一个模拟公司组织架构的实例。首先初始化了四个不同层级的角色:CEO、两个部门主管和四位员工,并通过调用addSub()
方法将他们按照实际的上下级关系进行关联。最后,调用CEO对象的show(1)
方法以递归形式输出整个公司的组织结构信息,展示出从CEO到普通员工之间的层级关系。