我可以动态更改父类

时间:2018-05-26 16:57:53

标签: java struts2 struts

下面是我的2个Action类,它们扩展了不同的Action类。

Employee1Action extends HRAction
Employee2Action extends ManagerAction

两个Action类都有一些共同的代码。我想在另一个(CommonAction)Action类中复制该公共代码,而Employee1Action和Employee2Action将扩展到CommonAction。但是这两个类都有不同的父类。我可以动态更改CommonAction类的父级吗?意味着如果指针在Employee1Action中,那么CommonAction将扩展到HRAction,同样也将用于Employee2Action class.can我喜欢这个吗?如果是,我该怎么办?

1 个答案:

答案 0 :(得分:2)

在Java中,你不能从多个父类继承 - 当然,委托是一种比继承更灵活的方法。

您可以从Employee1ActionEmployee2Action中提取包含常用操作的界面;添加实现并将公共代码放入此实现中。然后向Employee1ActionEmployee2Action对象提供实现的实例,并让它们将公共操作委托给委托实例。这样,您就可以删除代码重复。

在代码中,

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
}