2013-07-24 12 views
8

Istnieją klasy B i C biblioteki, zarówno dziedziczyć z klasy A. Mam 2 klasy, które rozszerzają B & C, a mianowicie MyB & MyC.Java Dziedziczenie wielu, pozbyć się duplikatu kodu

A 
/\  
    B C 
/ \ 
MyB MyC 

MyB & MyC share wiele wspólnego kodu i są one tylko nieco inaczej.

Chcę pozbyć się duplikatu kodu, w jaki sposób mogę to zrobić w java? W C++ byłoby to możliwe przez stworzenie wspólnej klasy bazowej i oddanie wszystkiego, co jest powszechne w nim następująco:

A 
/\ 
    B C 
    \/
    MyBase 
/\ 
MyB MyC 
+0

to sprawdzić: http://stackoverflow.com/questions/17226364/java-alternative-to-multiple-inheritance – jsedano

Odpowiedz

24

Można użyć composition:

  • utworzyć nową klasę MyCommon ze wspólnym kodem
  • dodać instancję MyCommon w MyB i MyC i przekazać pracę do MyCommon.
+1

gah mnie uprzedził. :) –

+1

Pokonaj mnie też. +1. – Renan

+4

Pokonaj wszystkich ... ;-) – Thrakbad

1

Klasa może obejmować tylko jedną klasę. Można jednak wdrożyć wiele interfejsów.

3

Zamiast posiadania całej logiki w tych klasach, należy mieć wspólną logikę w klasie D. Teraz spraw, aby każdy z nich miał numer i, który jest instancją D. To się nazywa composition.

1

W Javie będziesz używać coś wzdłuż linii:

  1. Skład (wzór) do hermetyzacji wystąpień B i C „w” MyBase.

  2. Refactor B i C (jeśli to konieczne), aby wystawiać oddzielny interfejs, powiedzmy IB i IC

  3. MyBase zaimplementować wiele interfejsów: IB i IC, przez "robienie właściwych rzeczy" mapowania metod na interfejs do wewnętrznych instancji B i C.

  4. MyB i MyC zaimplementowanie odpowiedniego interfejsu i połączeń mapowych na MyBase.