Из предыдущей статьи мы знаем, что модификатор доступа protected используется, когда поле/свойство/метод должны быть видны в классах-наследниках, но не видны снаружи класса. Сейчас мы разберём пример применения этого слова. Из статьи мы знаем, что один класс может наследоваться от другого. Например, черепаха наследуется от животного. При этом класс-наследник (черепаха) автоматически включает в себя всю логику (то есть все поля, свойства и методы) базового класса (животное). Говоря простым языком, черепаха является животным. Сделаем животным, чтобы каждый вид животных произносил что-нибудь при передвижении. Черепаха должна шипеть "Пш-ш-ш!", собака - лаять "Гав!", гепард - рычать "Р-р-р!". Эта логика должна вызываться непосредственно при передвижении, то есть, из метода Move() базового животного. Но базовое животное ничего не знает о том, какие у него бывают классы-наследники. Поэтому мы вынесем эту логику в отдельный метод Say(), который у каждого наследника будет свой, и будем вызывать