Переопределение методов
Тем не менее возможна и другая ситуация: дочерний класс вводит некоторый метод с тем же самым именем и параметрами, что и в родительском классе, но с иным содержанием. Такой метод дочернего класса переопределяет метод родительского класса.
В общем случае, когда сообщение посылается определенному объекту, поиск подходящего метода всегда начинается с проверки методов, определенных в классе данного объекта. Если ни один метод не найден, проверяются методы родительского класса. Если снова ни один метод не обнаружен, проверяется родительский класс родительского класса и т. д. В конечном счете находится подходящий метод, а при неблагоприятном исходе поиска формируется сообщение об ошибке.
Говорят, что метод в подклассе, имеющий то же имя и параметры, что и в суперклассе, переопределяет (override) метод суперкласса. Во время поиска метода, инициируемого приходом в объект сообщения, метод подкласса, конечно, будет найден раньше, чем одноименный метод в классе-родителе.
Метод дочернего класса может переопределять унаследованный метод путем замещения или уточнения. При замещении родительский код полностью перекрывается, то есть отбрасывается. Это значит, что код родительского метода никогда не задействуется при работе объектов дочернего класса. При уточнении вызов метода родительского класса является частью действий переопределяющего метода. Следовательно, родительское поведение целиком и полностью сохраняется и присоединяется к модифицированному поведению.