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

Когда изменить методы суперкласса

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

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

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

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

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

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

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

Расширение методов суперкласса

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

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

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

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

Повторно реализуйте процесс суперкласса в подклассе

Метод суперкласса может задать процесс, который выполняется в серии шагов с помощью метода для каждого шага (обычно 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

Похожие темы