Durante la lettura di varie domande di overflow dello stack e codice di altri, il consenso generale su come progettare le classi è chiuso. Ciò significa che di default in Java e C # tutto è privato, i campi sono definitivi, alcuni metodi sono definitivi e a volte le classi sono addirittura definitive .
L'idea alla base di questo è nascondere i dettagli di implementazione, che è un'ottima ragione. Tuttavia con l'esistenza di protected
nella maggior parte dei linguaggi OOP e del polimorfismo, questo non funziona.
Ogni volta che desidero aggiungere o modificare funzionalità in una classe, di solito sono ostacolata da posizioni private e finali ovunque. Qui i dettagli dell'implementazione sono importanti: stai prendendo l'implementazione e la estendi, conoscendo perfettamente quali sono le conseguenze. Tuttavia, poiché non riesco ad accedere ai campi e ai metodi privati e finali, ho tre opzioni:
- Non estendere la classe, basta aggirare il problema che porta al codice più complesso
- Copia e incolla l'intera classe, eliminando la riusabilità del codice
- Sposta il progetto
Queste non sono buone opzioni. Perché non viene utilizzato protected
nei progetti scritti in lingue che lo supportano? Perché alcuni progetti proibiscono esplicitamente di ereditare dalle loro classi?