Personalmente, non vedo alcun problema con entrambi.
Per quanto riguarda i metodi pubblici in più su classi derivate:
C'è scarsa utilità in questo, in molti casi. I metodi extra non saranno utilizzabili quando la classe è stata lanciata o impostata su un riferimento alla classe base, il che limita fortemente l'utilità di questa pratica. Detto questo, non c'è nulla di particolarmente sbagliato in questo approccio. Le sottoclassi hanno lo scopo di aggiungere un comportamento specifico - a volte, in una gerarchia di classi, c'è un nuovo comportamento in una sottoclasse che non è appropriato per la classe base. Se la sottoclasse verrà utilizzata frequentemente da sola, sembra perfettamente ragionevole che il comportamento extra venga modellato nei metodi.
Per quanto riguarda le firme costruttore -
non vedo alcun problema con questa operazione. Le sottoclassi spesso richiedono più informazioni per essere messe in uno stato utilizzabile rispetto alla classe astratta. Detto questo, in genere mi assicuro di implementare ogni costruttore nella classe base, oltre a aggiungere i nuovi parametri richiesti per la sottoclasse.
Detto questo:
A meno che non ci sono buone ragioni, mi piacerebbe evitare di avere un costruttore della sottoclasse con un minor numero di parametri rispetto alla classe di base ... perché dovrei essere in grado di specificare qualcosa su un caso più generico e non il caso specifico? Trovo che di solito si confonda quando le sottoclassi hanno opzioni di costruzione completamente diverse rispetto alle loro classi base.
fonte
2009-06-09 17:19:28
* EDIT * FYI, mi riferisco al caso in cui stai costruendo un oggetto da una fabbrica. Sto sostenendo che il codice chiamante, nel caso di una fabbrica, dovrebbe sapere quali metodi aspettarsi di avere dalle classi derivate. –