Quando si leggono varie domande di Stack Overflow e il codice di altri, il consenso generale su come progettare le classi viene chiuso. Ciò significa che per impostazione predefinita in Java e C # tutto è privato, i campi sono finali, alcuni metodi sono definitivi e talvolta le classi sono persino definitive .
L'idea alla base di ciò è quella di nascondere i dettagli dell'implementazione, che è un'ottima ragione. Tuttavia, con l'esistenza della protected
maggior parte delle lingue e del polimorfismo OOP, questo non funziona.
Ogni volta che desidero aggiungere o modificare funzionalità a una classe, di solito sono ostacolato da posizioni private e finali posizionate ovunque. Qui i dettagli dell'implementazione sono importanti: stai prendendo l'implementazione e la stai estendendo, conoscendo bene 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, solo aggirare il problema che porta al codice più complesso
- Copia e incolla l'intera classe, uccidendo la riusabilità del codice
- Fork il progetto
Quelle non sono buone opzioni. Perché non viene protected
utilizzato nei progetti scritti in lingue che lo supportano? Perché alcuni progetti proibiscono esplicitamente di ereditare dalle loro classi?