Определение времени выполнения базового класса во время выполнения в Java - PullRequest
2 голосов
/ 15 июля 2011

У меня есть два класса, один из которых зависит от аппаратного обеспечения, а другой - нет (назовем их HardwareDependent и HardwareIndependent соответственно). Аппаратно-зависимый класс расширяет аппаратно-независимый класс. Теперь у меня есть другой класс, который по крайней мере должен быть расширением HardwareIndependent, но я бы предпочел, чтобы он был расширением HardwareDependent, когда это возможно, чтобы он мог использовать дополнительную функциональность. Есть ли возможность использовать отражение или что-то еще для достижения этой цели? Или это полная техническая невозможность? Я полагаю, что если ничего не получится, я мог бы написать класс дважды, но мне кажется, что это неэффективный подход. Спасибо за любую помощь заранее.

1 Ответ

2 голосов
/ 15 июля 2011

Наследование фиксируется во время компиляции.

Похоже, вы не хотите, чтобы ваш новый класс расширялся HardwareIndependent или HardwareDependent;Вы хотите, чтобы использовал объект, который мог быть или.Вы хотите состав, а не наследство.Ваш третий класс (назовем это HardwareComposite) имеет ссылку на HardwareIndependent.Затем вы можете проверить, является ли это HardwareDependent во время выполнения с оператором instanceof, и, если это так, привести его к HardwareDependent и использовать дополнительные возможности, которые предоставляет.

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

...