Является ли расширение класса за классом, которое продлевает другой класс, хорошей практикой? - PullRequest
0 голосов
/ 08 октября 2019

Мне не хватает расширения нескольких классов в Java. Я хотел бы определить некоторые атрибуты и методы в одном классе, чтобы хранить в одном месте эти атрибуты и методы, которые будут использоваться в нескольких классах для разных целей. Далее, мне нужна функциональность JPanel, поэтому мне нужно расширить свой класс и этим классом.

Я думаю об одном решении, но я не уверен, что это правильный путь. Это хорошая практика, чтобы сделать что-то подобное? У меня есть класс:

/*
* Class for keeping common arguments
* it is not possible to extends by two classes
* so I need extend here JPanel
*/
public class **ContentPanel** extends javax.swing.**JPanel** {
  private arg1;
  private arg2;

public void commonMethod1() {

}
/* ... */
}

Далее я использую это расширяет для некоторых классов:

public class CashboxesPanel extends ContentPanel {
  /* specific class with all needed functionality, some arguments, methods used only for this class ect. */
}

public class CardIndexesPanel extends ContentPanel {
/* next specific class with implemeted original funcionality not used anywhere */
}

/* more classes */

Я вижу основные недостатки:

  • этоНе ясно, сколько классов продлено другими классами. Я должен проверить источник расширенного класса, чтобы проверить, не расширяет ли он другой,
  • Я не вижу наиболее важной информации сверху: базовый класс - JPanel,
  • это будетужасная непонятная «цепочка» с большим количеством классов ...

Конечно, интерфейсы не могут иметь атрибутов и реализованных методов, поэтому они не пригодны для меня. Для абстрактных классов также не поддерживается расширение нескольких классов.

Может кто-нибудь дать мне совет о том, как обращаться с наследованием этого Java? (= скажите, пожалуйста, что Мир по-прежнему прекрасен, и для моей проблемы существует «красивое» решение ...)

1 Ответ

1 голос
/ 08 октября 2019

Существует мнение, что composition is better than inheritance.

Возможно, вы захотите взглянуть на шаблон стратегии и шаблон декоратора .

...