Manager类和Employee类都是EnterpriseMember的子类。如何为Employee类编写一个“ getManager”方法(该方法返回在其报告列表中具有该Employee的Manager实例)? 预先感谢!
public class Manager extends EnterpriseMember {
/*Fields */
private List reports = new ArrayList();
/*Constructor */
public Manager(String name){
super(name);
}
/*Methods */
public void addReport(Employee employee){
reports.add(employee);
}// How can "employee" know it is in this List?
}
public class Employee extends EnterpriseMember {
/*Constructor */
public Manager(String name){
super(name);
}
/*Methods */
public Manager getManager(){
return ???;
}
}
答案 0 :(得分:4)
类似的东西:
public class Manager {
private List<Employee> reports = new ArrayList<Employee>();
public void addReport(Employee e) {
if (e != null) {
this.reports.add(e);
e.setManager(this);
}
}
}
public class Employee {
private Manager manager;
public void setManager(Manager m) {
if (m != null) {
this.manager = m;
}
}
}
以防万一,请添加所需的所有其他方法。我仅说明了如何将Manager
中的Employee
引用添加到直接报表的List
中。
您还应该有一个removeReport
方法,该方法将从Employee
中删除List
并将其Manager
设置为null
。
您打算如何在此Employee
中找到一个List
?按名字?员工ID?提示:考虑为您的班级正确覆盖equals
和hashCode
。
Managers
也不Employees
吗?老板没有老板吗?这是一个层次结构,一棵树。
答案 1 :(得分:1)
通常,具有不同属性的对象如下所示:
public class Employee extends EnterpriseMember {
private Manager manager;
private String name; // You probably don't need this because you defined it in the Superclass.
.
.
.
/*Constructor */
public Employee(String name){
super(name);
}
/*Methods */
public Manager getManager(){
return manager;
}
public void setManager(Manager manager){
this.manager = manager
}
// Other getters and setters for the attributes.
}