User.java(抽象类)
public abstract class User {
private int id;
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = int;
}
}
Admin.java
public class Admin extends User {
public Admin(int id) {
super.setId(id);
}
public void promoteEmployee(Employee employee) {
// How would I change the employee object into an admin object?
}
}
Employee.java
public class Employee extends User {
public Employee(int id) {
super.setId(id);
}
}
基本上在方法promoteEmployee中,它接收Employee对象并使其成为管理对象。你会怎么做?
基本上
Employee employee = new Employee();
我想要转变为
Admin employee = new Admin();
答案 0 :(得分:1)
此问题主要属于patterns
。
首先。您可以使用 Builder Pattern 根据Employee
创建新的Admin
。 (例如,使用new Employee(admin)
)
第二。您可以对one
和Admin
使用Employee
课程,并使用 State Pattern 将Admin
更改为Employee
。在此,您不会创建新对象,并且能够快速更改两个方向上的对象(或者您可能有更多User
实例。
这两种方法都有优点和反差。一切都取决于你的目标。在我的实践中,Admin
是具有额外权限的Employee
,因此我认为boolean admin
的{{1}}参数对于大多数情况都足够了。
答案 1 :(得分:0)
不可能将子类强制转换为另一个子类。
但是,您可以利用它们扩展相同的父类。
让每个人都成为User
即
User bob = new Employee(2);
User manager = new Admin(1);
bob = new Admin(bob.getId()) // this works!
答案 2 :(得分:0)
此处Employee
和Admin
都是User
的子类。在班级Employee
和Admin
之间没有任何关系(IS-A关系)。
Employee
和Admin
类的对象可以由类User
引用变量保存。但在Employee
和Admin
之间无法做到这一点。
因此,您在代码中编写的任何代码都将实现您想要的目标。
现在,我建议您对代码进行一些更改,以便在下次编辑中实现目标。
public class Admin extends Employee { // change the super class from User to Employee.
public Admin(int id) {
super.setId(id);
}
public void promoteEmployee(Employee employee) {
// How would I change the employee object into an admin object?
}
}
现在,这是Admin
和Employee
之间的关系。这是Admin
和Employee
之间的正确关系。因为每个Admin
都是Employee
类型。