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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top