Расширяет два класса - PullRequest
       6

Расширяет два класса

0 голосов
/ 03 ноября 2010

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

Ответы [ 3 ]

3 голосов
/ 03 ноября 2010

Это тот случай, когда фраза " Composition over Inheritence" на самом деле подходит ...

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

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

2 голосов
/ 03 ноября 2010

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

Yahoo Java OO!

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

Удачного кодирования.

1 голос
/ 03 ноября 2010

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

...