У меня есть два класса ModalWinodw и SkinnableWindow, которые расширяют класс Window. Я хочу создать класс, который имеет функцию из обоих классов, но в классе Java может распространяться только один суперкласс. Итак, как это решить?Расширяет два класса
ответ
Composition (по крайней мере один, возможно, оба из базовых классов будут объектом-членом). И множество прокси-серверов по мере необходимости (некоторые редакторы помогут вам здесь).
Yahoo Java OO!
Редактировать: В то время как композиция является «способом перехода» здесь (без переоценки иерархии классов), существуют определенные ограничения в зависимости от того, как используются интерфейсы и имена номинативных имен. Если вам нужно передать «конкретный» тип (ModalWindow или SkinnableWindow) в любом месте, где вы в значительной степени находитесь в мире обид, так как ваш новый класс может иметь не более одного из них в качестве предка (так что если он один или меньше, вы можете быть в состоянии проскользнуть). Использование интерфейсов и как общий о возможных типах может уменьшить эту боль.
Счастливое кодирование.
Вы можете использовать композицию. У вашего класса есть один (или оба) в качестве полей и выставляете свои методы в качестве сквозных методов.
Это тот случай, когда фраза «Composition над Наследование» на самом деле подходит ...
Я хотел бы создать интерфейс, который сочетает в себе функциональность обоих классов, которые я хочу, чтобы соответствовать.
Я бы тогда создал класс, который реализует мой новый интерфейс. Этот класс будет содержать экземпляр как ModalWindow, так и SkinnableWindow. В зависимости от того, какая функция вызывается, мой класс просто передал вызов метода соответствующему классу, используя функциональность каждого класса, когда это необходимо.
Это один из примеров того, почему интерфейсы иногда лучше, чем классы. –
И это также один из примеров того, почему мне не нравится Java «OO» :-) – 2010-11-03 19:14:37