Ho già questa struttura della classe principale che non può essere modificata :
class A {
//some basic fields and methods
}
class B {
//some another basic fields and methods
}
Sono le classi di base e aggiungo alcune funzionalità in aggiunta al sistema esistente.
Devo aggiungere alcune funzionalità comuni a queste classi. La sua implementazione è quasi identica per A
e B
. La mia soluzione attuale è costruire qualcosa del genere:
class A {
//some basic fields and methods
}
class B {
//some another basic fields and methods
}
class Foo extends A {
//my new features
}
class Bar extends B {
//my new features (identical with Foo)
}
Il problema è che non posso cambiare la classe A o B e non solo non posso cambiarli, ho bisogno di entrambe le classi A
e B
e le mie classi Foo
e Bar
esistenti. Quindi usare la riflessione per cambiare le classi A e B non è una soluzione.
Ho anche provato ad aggiungere questa funzionalità come api-object:
class FeatureApi {
my new features
}
class Foo extends A {
FeatureApi api;
}
class Bar extends B {
FeatureApi api;
}
Ma ottieni un altro problema: i nuovi metodi devono accedere ai miei campi / metodi delle classi. Ma non li ho in api-object.
In breve:
- Non riesco a modificare le classi esistenti
- Voglio creare alcune classi personalizzate, che estendono
A
eB
- Non ho bisogno di accedere a nessun campo privato.
- Oltre a modifiche specifiche, le mie classi avranno molte funzionalità identiche per entrambi.
UPD 2 Lo scopo principale è quello di implementare esattamente lo stesso comportamento in due classi personalizzate, ereditate da due classi di base intercambiabili. Come vedo ora, l'ereditarietà delle classi base non ha alcun senso, quindi l'ho rimosso e ho chiarito la mia domanda.