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!