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

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

Проект класса включает, вы, чтобы передать объект подкласса методу суперкласса и иметь метод выполняетесь правильно. В то же время методы подклассов могут применить специальную обработку к специфическим аспектам подкласса. Некоторые полезные методы включают:

  • Расширьте — Вызов метода суперкласса из метода подклассов

  • Переопределите — Повторно реализующий в подклассе, защищенные методы, которые называются из общедоступного метода суперкласса

  • Переопределение — Определение тех же именованных методов и в супер и в подкласс, но использование различных реализаций

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

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

Например, предположите, что и суперкласс и подкласс задают метод под названием 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
      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

Похожие темы