Spesso ho delle superclassi che contengono una forma più astratta di una classe come variabile membro rispetto alla mia esigenza di sottoclassi. Trovo il mio codice sparpagliato ((ClassName)variableName).methodName() . Il modo migliore per risolvere questo problema è creare un metodo protetto / privato chiamato qualcosa come getVariableNameAsClass() ? Non è molto più breve nelle lettere, ma un IDE può farlo molto più velocemente di manovrare con i tasti per aggiungere tra parentesi. O c'è una soluzione migliore?
Il motivo per cui ho bisogno di trasmettere è perché tutte le sottoclassi di Line usano una classe Output , quindi inserisco i getter e i setter che si riferiscono alla classe Output nella classe base. Il problema è che utilizza AudioLine e AudioOutput e deve definire metodi aggiuntivi che utilizzano le funzionalità più specifiche.
Quindi, ecco il mio intero design di classe: ho una classe Line con due sottoclassi, VideoLine e AudioLine , che delegano alcune delle loro funzionalità a una classe Output interna . Output class ha una sottoclasse AudioOutput e VideoOutput . Ho definito tutte le funzionalità per la classe Line che si basa solo sui metodi della classe Output all'interno della classe Line , in conformità con DRY. Line 's AudioLine e VideoLine entrambi deligano funzionalità aggiuntive a AudioOutput e VideoOutput . Dal momento che entrambi impostano la variabile protetta Output nei loro costruttori (e quindi CONOSCONO quale sottoclasse contiene), è sembrato avere senso scriverlo.