下面是我的2个Action类,它们扩展了不同的Action类。
Employee1Action extends HRAction
Employee2Action extends ManagerAction
两个Action类都有一些共同的代码。我想在另一个(CommonAction)Action类中复制该公共代码,而Employee1Action和Employee2Action将扩展到CommonAction。但是这两个类都有不同的父类。我可以动态更改CommonAction类的父级吗?意味着如果指针在Employee1Action中,那么CommonAction将扩展到HRAction,同样也将用于Employee2Action class.can我喜欢这个吗?如果是,我该怎么办?
答案 0 :(得分:2)
在Java中,你不能从多个父类继承 - 当然,委托是一种比继承更灵活的方法。
您可以从Employee1Action
和Employee2Action
中提取包含常用操作的界面;添加实现并将公共代码放入此实现中。然后向Employee1Action
和Employee2Action
对象提供实现的实例,并让它们将公共操作委托给委托实例。这样,您就可以删除代码重复。
在代码中,
interface CommonAction {
void doSomething();
}
class DefaulCommonAction implements CommonAction {
public void doSomething() {
/* do something here -
* this is the duplicate code from Employee 1 and 2
*/
}
}
class HRAction {}
class ManagerAction {}
class Employee1Action extends HRAction {
private CommonAction action;
public Employee1Action (CommonAction action){
this.action = action;
}
// delegate operations
public void doSomething() {
action.doSomething();
}
}
class Employee2Action extends ManagerAction {
// the same delegation here
}