quindi, supponiamo di avere alcuni campi e metodi contrassegnati come protetti (non virtuali). presumibilmente, l'hai fatto perché non li hai contrassegnati come pubblici perché non vuoi che alcuni nincompoop li chiamino accidentalmente nell'ordine sbagliato o passino parametri non validi, o non vuoi che le persone facciano affidamento sul comportamento che sei andando a cambiare più tardi.
quindi, perché va bene per quel nincompoop usare quei campi e metodi da una sottoclasse? per quanto ne so, possono comunque rovinarsi nello stesso modo, e gli stessi problemi di compatibilità esistono ancora se si cambia l'implementazione.
i casi di protezione a cui riesco a pensare sono: distruttori non virtuali, quindi non puoi rompere le cose eliminando la classe base. metodi virtuali, in modo da poter sostituire i metodi 'privati' richiamati dalla classe base. costruttori in c ++. in java / c # che segna la classe come astratto, sostanzialmente lo stesso.
altri casi d'uso?