Derivati modalità condivise di classe
-
28-09-2019 - |
Domanda
Ho una funzione che 2 classi derivate utilizzano, ma il terzo non lo fa, avrebbe senso solo per lasciarlo nella classe base, anche se una delle 3 classi derivate non lo usa?
L'unico modo ho potuto pensare non consentire terza classe è creare fondamentalmente una classe intermedia derivata della base, quindi il 2 che utilizzano la funzione comune derivano largo della seconda classe.
E 'possibile per evitare che la 3 ° classe da utilizzando la funzione, mentre lasciando i due che si suppone ad usarlo, lo usa?
non che appena sembrano andare in mare, voglio dire finché non "provare" a chiamare la funzione dal 3 ° di classe, non dovrebbe essere un problema, ho appena era interessato se ci fosse un modo per evitare tutto insieme senza un sacco di problemi.
Soluzione
Non c'è un modo per farlo direttamente. Fondamentalmente, quando si sottoclasse, stai dicendo la sottoclasse è una versione più specifica della classe di base.
In questo caso, si sta cercando di dire "la sottoclasse è una versione più specifica della classe base, except for the fact that it shouldn't be able to touch XXX
". Quella, in sostanza, violando il Liskov principio di sostituzione di .
Il modo migliore per gestire questa situazione è quello di aggiungere una seconda classe di base nella gerarchia, che è credo la soluzione si parla.
In sostanza, rendere la gerarchia:
base
| \---- subclass without feature available
|
\--base+feature
\--subclass one with specific feature
\--subclass two with specific feature
Altri suggerimenti
Si può fare questa funzione virtuale. Quindi ignorare la funzione nel 3 ° di classe e un'eccezione. Si eviterà agli sviluppatori di utilizzare la funzione nel 3 ° class.