Ho due classi, chiamiamole Foo
e Bar
. Entrambi estendono classi diverse ( Foo extends X
, Bar extends Y
), che hanno un antenato comune "via via" l'albero di ereditarietà, qualcosa del genere:
Sia Foo
che Bar
hanno alcuni membri di classi comuni (e alcuni membri che non condividono) e vorrei implementare un metodo che sia lo stesso per entrambe le classi, agendo su questi membri . Il problema è - Non riesco a cambiare l'albero di ereditarietà e aggiungere una superclasse che sarà la stessa per entrambi (mentre questo potrebbe essere un segno per una cattiva progettazione delle classi e dell'ereditarietà, questo non è quello che chiedo qui).
Per semplicità, supponiamo che i membri simili della classe saranno member1
e member2
, e il nome della funzione rilevante sarà func()
.
Un'opzione che ho pensato è di incapsulare i membri della classe simili in una nuova classe e creare il relativo metodo per essa.
Ad esempio, posso creare una classe denominata Baz
che conterrà sia member1
che member2
e Foo
e Bar
conterranno la classe Baz
anziché questi membri. I metodi func()
in Foo
e Bar
chiameranno solo baz.func()
.
Questa è davvero una soluzione. Tuttavia, quale dovrebbe essere una soluzione in cui non posso cambiare anche i membri della classe? In tal caso, ho pensato di implementare sia Foo
che Bar
per implementare un'interfaccia (per semplicità chiamiamola IFunc
). E crea un metodo (o static
o no) da qualche altra parte che avrà un argomento IFunc
che imiterà func
. Ma questa sembra una soluzione non così buona. Quale sarà la soluzione migliore per questo caso?
Per chiarire: sto cercando di eliminare la duplicazione del codice nell'implementazione di func
Grazie!