exponenta event banner

Изменение унаследованных методов

Изменение методов суперкласса

Конструкции классов позволяют передавать объекты подкласса методам суперкласса. Метод суперкласса выполняется правильно, поскольку объект подкласса является объектом суперкласса. Однако подклассы могут реализовать свои собственные версии методов суперкласса, которые MATLAB ® вызывает при передаче объектов подкласса.

Подклассы переопределяют наследуемые методы (то есть реализуют метод с тем же именем), когда необходимо обеспечить специализированное поведение в подклассе. Вот несколько шаблонов, которые переопределяют методы суперкласса.

  • Расширьте метод суперкласса, вызвав его из метода подкласса. Метод подкласса может выполнять специфичную для подкласса обработку в дополнение к вызову метода суперкласса.

  • В способе суперкласса выполните ряд шагов в процедуре с использованием защищенных методов. Затем эти шаги повторно реализуются в методе подкласса путем переопределения защищенных методов, которые вызываются из общедоступного метода суперкласса.

  • Переопределите одноименный метод в подклассе, но используйте различные реализации, чтобы выполнить одну и ту же операцию для объектов подкласса по-разному.

  • Реализуйте абстрактные методы суперкласса в подклассе. Абстрактные суперклассы могут определять методы без реализации и полагаться на подклассы для обеспечения реализации. Дополнительные сведения см. в разделе Определение суперкласса интерфейса.

Методы подкласса, которые переопределяют методы суперкласса, должны определять одно и то же значение для Access как определено методом суперкласса.

Расширить методы суперкласса

Вызов метода суперкласса с тем же именем из метода подкласса позволяет расширить метод суперкласса для объектов подкласса без влияния на метод суперкласса.

Например, предположим, что и суперкласс, и подкласс определяют метод с именем foo. Метод подкласса вызывает метод суперкласса и выполняет другие шаги в дополнение к вызову метода суперкласса. Метод подкласса может работать со специализированными частями подкласса, которые не являются частью суперкласса.

Например, этот подкласс определяет foo метод, вызывающий суперкласс foo метод

classdef Sub < Super
   methods
      function foo(obj)
         % preprocessing steps
          ...
         foo@Super(obj);
         % postprocessing steps
          ...
      end
   end
end

Процесс суперкласса Reimplement в подклассе

Метод суперкласса может определять процесс, который выполняется в последовательности шагов, используя метод для каждого шага (обычно Access атрибут имеет значение protected для ступенчатых методов). Этот шаблон (называемый шаблонным методом) позволяет подклассам создавать собственные версии защищенных методов, реализующих отдельные шаги процесса. Процесс является специализированным для подкласса.

Реализуйте этот метод, как показано ниже:

classdef Super
   methods (Sealed)
      function foo(obj)
         step1(obj) % Call step1
         step2(obj) % Call step2
         step3(obj) % Call step3
      end
   end
   methods (Access = protected)
      function step1(obj)
         % Superclass version
      end
      function step2(obj)
         % Superclass version
      end
      function step3(obj)
         % Superclass version
      end
   end
end

Подкласс не переопределяет foo способ. Вместо этого он переопределяет только защищенные методы, выполняющие последовательность шагов (step1(obj), step2(obj), step3(obj)). Этот метод позволяет подклассу специализировать действия, выполняемые каждым шагом, но не управлять порядком шагов в процессе. При передаче объекта подкласса в суперкласс foo MATLAB вызывает методы шага подкласса из-за правил диспетчеризации. Дополнительные сведения об отправке методов см. в разделе Вызов метода.

classdef Sub < Super
   ...
   methods (Access = protected)
      function step1(obj)
         % Subclass version
      end
      function step2(obj)
         % Subclass version
      end
      function step3(obj)
         % Subclass version
      end
      ...
   end
end

Переопределить методы суперкласса

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

classdef Super
   methods
      function foo(obj)
         % Superclass implementation
      end
   end
end
classdef Sub < Super
   methods
      function foo(obj)
         % Subclass implementation
      end
   end
end

Реализация абстрактного метода в подклассе

Абстрактные методы не имеют реализации. Подклассы, наследующие абстрактные методы, должны предоставлять специфичную для подкласса реализацию, чтобы подкласс был конкретным классом. Дополнительные сведения см. в разделе Абстрактные классы и члены классов.

classdef Super
   methods (Abstract)
      foo(obj)
         % Abstract method without implementation
      end
   end
end
classdef Sub < Super
   methods
      function foo(obj)
         % Subclass implementation of concrete method
      end
   end
end

Связанные темы