Могу ли я изменить родительский класс динамически - PullRequest
0 голосов
/ 26 мая 2018

Ниже приведены мои 2 класса Action, которые расширяют различные классы Action.

Employee1Action extends HRAction
Employee2Action extends ManagerAction

В обоих классах действий есть общий код.Я думаю скопировать этот общий код в другой класс действия (CommonAction), и Employee1Action и Employee2Action будут расширены до CommonAction.Но оба класса имеют разные родительские классы.Могу ли я динамически изменить родителя класса CommonAction?Означает, что если указатель находится в Employee1Action, то CommonAction будет расширен до HRAction, и то же самое будет для класса Employee2Action. Могу ли я сделать это?Если да, то как я могу это сделать?

1 Ответ

0 голосов
/ 26 мая 2018

В 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
}
...