我可以动态更改父级 class 吗
can i change parent class dynamically
下面是我的 2 个 Action classes,它们扩展了不同的 Action classes。
Employee1Action extends HRAction
Employee2Action extends ManagerAction
两个Action中有一些共同的代码类。我正在考虑将通用代码复制到另一个 (CommonAction) Action class 中,Employee1Action 和 Employee2Action 将扩展到 CommonAction。但是两个 classes 都有不同的父 classes。我可以动态更改 CommonAction class 的父级吗?意味着如果指针在 Employee1Action 中,那么 CommonAction 将扩展到 HRAction,同样适用于 Employee2Action class.can 我喜欢这样吗?如果是,我该怎么做?
在 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
}
下面是我的 2 个 Action classes,它们扩展了不同的 Action classes。
Employee1Action extends HRAction
Employee2Action extends ManagerAction
两个Action中有一些共同的代码类。我正在考虑将通用代码复制到另一个 (CommonAction) Action class 中,Employee1Action 和 Employee2Action 将扩展到 CommonAction。但是两个 classes 都有不同的父 classes。我可以动态更改 CommonAction class 的父级吗?意味着如果指针在 Employee1Action 中,那么 CommonAction 将扩展到 HRAction,同样适用于 Employee2Action class.can 我喜欢这样吗?如果是,我该怎么做?
在 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
}