Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以动态更改父类吗_Java_Struts2_Struts - Fatal编程技术网

Java 我可以动态更改父类吗

Java 我可以动态更改父类吗,java,struts2,struts,Java,Struts2,Struts,下面是我的两个动作类,它们扩展了不同的动作类 Employee1Action extends HRAction Employee2Action extends ManagerAction 这两个动作类中都有一些通用代码。我想在另一个(CommonAction)Action类中复制该通用代码,Employee1AAction和Employee2Action将扩展到CommonAction。但这两个类都有不同的父类。我可以动态更改CommonAction类的父级吗?意味着若指针位于Employee

下面是我的两个动作类,它们扩展了不同的动作类

Employee1Action extends HRAction
Employee2Action extends ManagerAction

这两个动作类中都有一些通用代码。我想在另一个(CommonAction)Action类中复制该通用代码,Employee1AAction和Employee2Action将扩展到CommonAction。但这两个类都有不同的父类。我可以动态更改CommonAction类的父级吗?意味着若指针位于Employee1Action中,那个么CommonAction将扩展到HRAction,Employee2Action类也是如此。我可以这样做吗?如果是,我该怎么做?

在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
}

在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
}

我同意这个答案。你需要有一个更深层的基础,从那里继承get,并将其拆分为单独的继承树,或者如果不需要逻辑(或者可以是默认逻辑),则使用接口。我同意这个答案。您需要有一个更深的基础,从那里继承get并将其拆分为单独的继承树,或者如果不需要逻辑(或者可以是默认逻辑),则使用接口。