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并将其拆分为单独的继承树,或者如果不需要逻辑(或者可以是默认逻辑),则使用接口。