Главная / Компьютеры / Что такое переопределение методов.

Что такое переопределение методов.

Переопределение методов используется в объектно-ориентированном программировании в иерархии наследования и происходит, когда метод, определённый в суперклассе, переопределяется в подклассе. Обычно метод подкласса делает что-то отличное от метода суперкласса или расширяет возможности суперкласса, но это не должно иметь место. Переопределение методов происходит всякий раз, когда метод суперкласса переопределяется в подклассе, независимо от содержимого переопределенного метода. Переопределенные сигнатуры методов должны быть точно такими же.
Например, класс A может содержать метод с именем doSomething, и этот метод не принимает входных параметров. Кроме того, классы B и C могут быть подклассами класса A. Класс B может содержать метод с именем “doSomething”, который не принимает входные параметры, а класс C может содержать метод “doSomething”, который принимает число в качестве входного параметра. В этом примере только класс B продемонстрировал бы переопределение метода, потому что его метод “doSomething” имеет ту же сигнатуру метода, что и его суперкласс, класс A. Метод “doSomething” в классе C, с другой стороны, демонстрирует перегрузку метода, потому что он создаёт совершенно новый метод.

Виртуальное наследование в C ++ является ещё одним примером переопределения методов. Виртуальные методы в суперклассах могут быть или не быть реализованы, но любое их определение подкласса является экземпляром переопределения методов. Когда метод переопределяется в подклассе, метод суперкласса не вызывается, если он не вызывается явно. Этот конкретный способ вызова переопределенного методов часто называют «скрывающим» реализацию суперкласса.

Хотя переопределение методов является очень гибким, не все методы могут быть переопределены, и бывают моменты, когда эта жёсткость может быть предпочтительнее. Как в Java, так и в C ++ конкретные сигнатуры могут применяться в сигнатурах методов, чтобы предотвратить переопределение методов в подклассе. Для этого Java использует «final», а C ++ использует ключевое слово «const». Предотвращение переопределения методов может быть полезным, если конкретная функция всегда должна оставаться неизменной по всему дереву наследования.

В общем, простые методы, которые получают небольшие фрагменты данных, не должны быть переопределены. Случаи, которые имеют наибольшую выгоду от переопределения, это когда подкласс стремится добавить функциональность в метод суперкласса без создания совершенно нового метода для этого. Необычные случаи, когда метод должен быть полностью переделан для одного конкретного типа объекта, также могут выиграть от этой техники. Всякий раз, когда метод переопределяется, для программиста важно адекватно комментировать методы суперкласса и подкласса. В идеале, эти комментарии должны прояснить, что делает каждый вариант метода, а также как и почему они отличаются.



Оставьте комментарий

Ваш email не будет опубликован. Обязательные поля помечены *

*