Затенение - это не то, что я беспокоюсь о том, чтобы понять или реализовать, если оно не очень хорошо подходит для проблемы. Я видел, что он использовался неправильно и вызывал странные логические ошибки гораздо чаще, чем использовался правильно. Я думаю, что основная причина в том, что когда программист забывает поместить переопределения в сигнатуру метода, тогда предупреждение компилятора предложит новое ключевое слово. Я всегда чувствовал, что лучше порекомендовать использовать override.