2010-11-03 1 views
0

У меня есть два класса ModalWinodw и SkinnableWindow, которые расширяют класс Window. Я хочу создать класс, который имеет функцию из обоих классов, но в классе Java может распространяться только один суперкласс. Итак, как это решить?Расширяет два класса

+0

Это один из примеров того, почему интерфейсы иногда лучше, чем классы. –

+0

И это также один из примеров того, почему мне не нравится Java «OO» :-) – 2010-11-03 19:14:37

ответ

2

Composition (по крайней мере один, возможно, оба из базовых классов будут объектом-членом). И множество прокси-серверов по мере необходимости (некоторые редакторы помогут вам здесь).

Yahoo Java OO!

Редактировать: В то время как композиция является «способом перехода» здесь (без переоценки иерархии классов), существуют определенные ограничения в зависимости от того, как используются интерфейсы и имена номинативных имен. Если вам нужно передать «конкретный» тип (ModalWindow или SkinnableWindow) в любом месте, где вы в значительной степени находитесь в мире обид, так как ваш новый класс может иметь не более одного из них в качестве предка (так что если он один или меньше, вы можете быть в состоянии проскользнуть). Использование интерфейсов и как общий о возможных типах может уменьшить эту боль.

Счастливое кодирование.

1

Вы можете использовать композицию. У вашего класса есть один (или оба) в качестве полей и выставляете свои методы в качестве сквозных методов.

3

Это тот случай, когда фраза «Composition над Наследование» на самом деле подходит ...

Я хотел бы создать интерфейс, который сочетает в себе функциональность обоих классов, которые я хочу, чтобы соответствовать.

Я бы тогда создал класс, который реализует мой новый интерфейс. Этот класс будет содержать экземпляр как ModalWindow, так и SkinnableWindow. В зависимости от того, какая функция вызывается, мой класс просто передал вызов метода соответствующему классу, используя функциональность каждого класса, когда это необходимо.

 Смежные вопросы

  • Нет связанных вопросов^_^