Buongiorno a tutti!
Allora, ho un piccolo problema, vi spiego la situazione:
Ho una classe astratta chiamata Cromosoma che dichiara una serie di funzioni astratte, tra cui anche:
abstract public Cromosoma getNewOne();
Ok.
Poi ho altre 2 classi astratte che ereditano da Cromosoma: CromosomaBinarioA e CromosomaPermutazioneA.
Queste classi inziano a definire alcune delle funzioni astratte definite in Cromosoma.
Infine vi è un'ultima classe MyCromosoma non astratta che eredita da uno a scelta tra CromosomaBinarioA o CromosomaPermutazioneA, a seconda del tipo di rappresentazione che serve per il cromsoma!
Spiegata la situazione vi illustro qual'è il mio problema:
con questa gerarchia di classi mi risulta possibile definire il corpo della funzione
abstract public Cromosoma getNewOne();
dichiarata in Cromsoma, solamente all'ultimo passo della gerarchia, ovvero in MyCromsoma.
Questo è spiacevole perchè il corpo della funzione è semplicemente il seguente:
public Cromosoma getNewOne() {
Cromosoma c=new MyCromosoma(11);
c.init();
return c;
}
Cm vede questo metodo non fa nulla di speciale.
Io avrei voluto mettere la sua definizione nelle due classi astratte intermedie.
Il problema è che essendo astratte non esiste in costruttore e quindi non posso istanziare il nuovo oggetto.
Non esiste un modo per dire che il costruttore da usare sarà quello della classe figlia che eredità dalla classe astratta?
mi spiego. Un qualcosa del tipo:
Cromosma c=new child(11);
???
Magari sto dicendo solo cavolta, però cm esiste super per riferirsi alal classe padre mi sarebbe comodo anche un modo per riferirsi alla classe figlia!
Ciao e grazie!