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

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

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

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

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

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

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

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

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

Похожие темы

Была ли эта тема полезной?