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.