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