Проекты класса позволяют вам передать объекты подкласса методам суперкласса. Метод суперкласса выполняется правильно, потому что объект подкласса является объектом суперкласса. Однако подклассы могут реализовать свои собственные версии методов суперкласса, которые вызывает 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