2013-07-24 24 views
8

Esistono classi di libreria B e C, entrambe ereditate dalla classe A. Ho 2 classi che estendono B & C, ovvero MyB & MyC.Java ereditarietà multipla, eliminazione del codice duplicato

A 
/\  
    B C 
/ \ 
MyB MyC 

MyB & MyC condividono un sacco di codice comune e sono solo leggermente diverse.

Voglio sbarazzarmi del codice duplicato, come posso farlo in java? In C++ sarebbe possibile con la creazione di una classe base comune e mettendo tutto ciò che è comune in esso come segue:

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

Check this out: http://stackoverflow.com/questions/17226364/java-alternative-to-multiple-inheritance – jsedano

risposta

24

si potrebbe usare composition:

  • creare una nuova MyCommon classe con il codice comune
  • aggiungere un'istanza di MyCommon in MyB e MyC e delegare il lavoro a MyCommon.
+1

gah mi ha battuto ad esso. :) –

+1

Beat anche a me. +1. – Renan

+4

Picchia tutti ... ;-) – Thrakbad

1

Una classe può estendersi solo da una classe. Tuttavia, è possibile implementare più interfacce.

3

Invece di avere tutta la logica in queste classi, hanno tutta la logica comune all'interno della classe D. Ora fai in modo che MyC e MyB abbiano ciascuno un membro che sia un'istanza di D. Questo è chiamato composition.

1

In Java userete qualcosa sulla falsariga di:

  1. Composizione (pattern) per incapsulare le istanze di B e C "in" MyBase.

  2. Refactor B e C (se necessario) per esporre un'interfaccia separata, dicono IB e IC

  3. MyBase per implementare interfacce multiple: IB e IC, dal "fare la cosa giusta" per mappare metodi su un'interfaccia alle istanze interne B e C.

  4. MyB e MyC per implementare l'interfaccia appropriata e mappa chiamate a MyBase.