Проект класса включает, вы, чтобы передать объект подкласса методу суперкласса и иметь метод выполняетесь правильно. В то же время методы подклассов могут применить специальную обработку к специфическим аспектам подкласса. Некоторые полезные методы включают:
Расширьте — Вызов метода суперкласса из метода подклассов
Переопределите — Повторно реализующий в подклассе, защищенные методы, которые называются из общедоступного метода суперкласса
Переопределение — Определение тех же именованных методов и в супер и в подкласс, но использование различных реализаций
Методы подклассов могут вызвать методы суперкласса того же имени. Этот метод позволяет вам расширить метод суперкласса в подклассе, полностью не переопределяя метод суперкласса.
Например, предположите, что и суперкласс и подкласс задают метод под названием 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