Полиморфизм – возможность использования методов с одинаковым именем, но с разным содержанием.
Полиморфизмом дает возможность производного класса изменять или переопределять методы, которые он наследует от базового класса. Эта функция используется, если в методе, который имеет отличия либо не определен в базовом классе, нужно выполнить какие-то особые действия.
Перегрузкой называется создание разных методов с одним именем для разных объектов. Компилятору известно, какой метод следует использовать, поскольку во время каждого создания объекта предоставляется список аргументов (если таковые имеются). Перегрузка может сделать код более гибким и удобочитаемым.
Например, поскольку метод Животное.MoveLeft должен быть общим, чтобы подходить для всех животных, он является, возможно, очень простым, как например "изменение положения так, чтобы голова животного была в направлении X". Однако для класса Кошка этого может быть недостаточно. Может потребоваться указать, как Кошка двигает лапами и хвостом при поворотах. И если класс Рыба или класс Птица уже определен, возможно, потребуется переопределить метод MoveLeft разными способами для каждого из классов.
Поскольку можно настроить поведение метода MoveLeft для конкретного класса, в коде, создающем класс и вызывающем его методы, отсутствует отдельный метод для каждого животного. Пока объект наследует от Животное, вызывающий код может вызывать лишь метод MoveLeft и собственную версию метода объекта.