заменить множественное наследование
От: goondick  
Дата: 24.10.11 07:48
Оценка:
что есть заменитель множественного наследования в джаве?

есть несколько классов. Задача от каждого класса сделать наследника с переопределением и добавлением кое-каких свойств. Но еще всех наследников обьединяют общие свойства которое желательно было бы вывести в отдельный родительский класс и не прописывать в каждом наследованном. Как это сделать?

например в с++ это просто, делаем множественное наследование:
class MyEditBox : public EditBox, public MyExtraGuiProperties

в джаве типа:
public class MyEditBox extends EdiBox... а потом как? куда приткнуть MyExtraGuiProperties?
Re: заменить множественное наследование
От: Blazkowicz Россия  
Дата: 24.10.11 07:59
Оценка:
Здравствуйте, goondick, Вы писали:

G>в джаве типа:

G>public class MyEditBox extends EdiBox... а потом как? куда приткнуть MyExtraGuiProperties?
— делегирование.
— статические методы.
— статический импорт.
Re[2]: заменить множественное наследование
От: goondick  
Дата: 24.10.11 08:14
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, goondick, Вы писали:


G>>в джаве типа:

G>>public class MyEditBox extends EdiBox... а потом как? куда приткнуть MyExtraGuiProperties?
B>- делегирование.
B>- статические методы.
B>- статический импорт.

а пример можно?

вот реальная ситуация например:

public class MyExtraGuiProperties{
   private int id;
   public int getId(){
      return id;
   }
}


как я могу избавиться от копирования данного кода в каждую мою компоненту с помощью статического метода?
Re[3]: заменить множественное наследование
От: Blazkowicz Россия  
Дата: 24.10.11 08:22
Оценка:
Здравствуйте, goondick, Вы писали:

G>как я могу избавиться от копирования данного кода в каждую мою компоненту с помощью статического метода?

Здесь только делегирование. Вообще, да. Не обратил внимания на то что код про GUI. Именно с ним чаще всего возникает вопрос когда наследуешься от всех компанент, а затем нужно от своих компанент заиметь нужное поведение.
Остаётся делегировать. Либо MyExtraProperties, либо саму компаненту:

class MyExtraPropertiesControl extends Control
class MyEditBox extends MyExtraProperties{
    MyEditBox delegate;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.