Эффективность с иерархией типов в Java - PullRequest
0 голосов
/ 24 марта 2012

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

Редактировать: Под эффективностью я подразумеваю, что в данной ситуации есть ли альтернативы упомянутым выше вариантам?

Есть ли другой эффективный способ представления этих двух классов, которые по существу будут одинаковыми на втором уровне? Поскольку объяснение было немного двусмысленным, вот картинка: http://i.imgur.com/mvCAS.png

Ответы [ 3 ]

1 голос
/ 24 марта 2012

Мне кажется, что вы смешиваете понятия возможностей и классификации . Видите ли, наследование не является правильным инструментом для всего. Попробуйте сделать некоторые из этих классов композиций, а не подклассов. Например, наличие «деактивации» ячеек представляется способностью таблицы и, возможно, может быть отдельным классом, который может быть составлен в классе таблицы для изменения поведения таблицы. Взгляните на стратегию и состояние .

1 голос
/ 24 марта 2012

Ваш вопрос не совсем понятен.

Я не хочу, чтобы класс, который будет их родителем, был абстрактным или интерфейсом, и я думаю, просто сделать его конкретнымбыть очень эффективным.

Ну, если вам не нужен ни абстрактный класс, ни конкретный класс, ни интерфейс, то, боюсь, вам не повезло.Java не предлагает другого выбора в объявлении / определении ваших типов.

Более того, Java не допускает множественное наследование.Это означает, что если вы хотите, чтобы Major Column был подклассом ColumnMajor Table и Таблица с деактивированной ячейкой , по крайней мере один из них должен быть interface,А поскольку в интерфейсах Java могут расширяться только другие интерфейсы, это означает, что Таблица также должна быть interface.

0 голосов
/ 24 марта 2012

Как правило, лучше настроить класс путем делегирования, а не выводить больше подклассов. Злоупотребление наследованием - типичное поведение начинающих.

В вашем случае подход может заключаться в создании класса, настраивающего отличное поведение вашего фактического набора классов. Если ваш дизайн такого класса позволяет создавать цепочки, вы получаете очень гибкую расширяемую архитектуру

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...