Материалы, представленные в этом разделе, основаны на понимании следующей информации:
Определение класса может задавать список классов, которые оно позволяет в качестве подклассов. Классы, отсутствующие в списке, не могут быть определены как подкласс класса. Чтобы задать разрешенные подклассы, используйте AllowedSubclasses
атрибут класса.
The AllowedSubclasses
атрибут обеспечивает проекту точку между Sealed
классы, которые не допускают подклассы, и поведение по умолчанию, которое не ограничивает подклассы.
Путем управления разрешенными подклассами можно создать запечатанную иерархию классов. То есть система классов, которая позволяет определенному набору классов выводиться из определенных базовых классов, но которая не допускает неограниченное подклассирование.
Дополнительные сведения об этом методе см. в разделе «Определение герметичной иерархии Классов».
Задайте список одного или нескольких разрешенных подклассов в classdef
оператор путем назначения meta.class
объекты к AllowedSubclasses
атрибут. Создайте meta.class
объект, ссылающийся на определенный класс, используя ?
оператор и имя класса:
classdef (AllowedSubclasses = ?ClassName) MySuperClass ... end
Используйте массив ячеек meta.class
объекты для определения нескольких допустимых подклассов:
classdef (AllowedSubclasses = {?ClassName1,?ClassName2,...?ClassNameN}) MySuperClass ... end
Всегда используйте полное имя класса при ссылке на имя класса:
classdef (AllowedSubclasses = ?Package.SubPackage.ClassName1) MySuperClass ... end
Назначение пустого массива ячеек AllowedSubclasses
атрибут фактически аналогичен определению Sealed
класс.
classdef (AllowedSubclasses = {}) MySuperClass ... end
Примечание
Используйте только то, ?
оператор и имя класса для генерации meta.class
объекты. Значения, присвоенные AllowedSubclasses
атрибут не может содержать никаких других MATLAB® выражения, включая функции, которые возвращают либо meta.class
объекты или массивы ячеек meta.class
объекты.
Включение класса в список AllowedSubclasses
не определяет этот класс как подкласс или требует, чтобы вы определили класс как подкласс. Это просто позволяет определить ссылку на класс как подкласс.
Объявление класса разрешенным подклассом не влияет на то, может ли этот класс сам быть подклассифицирован.
Определение класса может содержать назначения AllowedSubclasses
атрибут, который ссылается на классы, которые в данный момент не определены или доступны в пути MATLAB. Любой подкласс, на который MATLAB не может найти при загрузке класса, эффективно удаляется из списка, не вызывая ошибок или предупреждений. MATLAB запоминает ссылку на класс в случае, если она станет доступна позже точки во времени.
Примечание
Если MATLAB не находит ни один из классов в списке разрешенных подклассов, класс эффективно Sealed
. Запечатанный класс эквивалентен AllowedSubclasses = {}
.
Используйте meta.class
свойства RestrictsSubclassing
чтобы определить, является ли класс Sealed
или задает AllowedSubclasses
.
The AllowedSubclasses
атрибут позволяет вам задать герметичную иерархию классов путем запечатывания разрешенных подклассов:
classdef (AllowedSubclasses = {?SubClass1,?SubClass2}) SuperClass ... end
Определите допустимые подклассы как Sealed
:
classdef (Sealed) SubClass1 ... end classdef (Sealed) SubClass2 ... end
Запечатанные иерархии классов позволяют вам использовать уровень абстракции, требуемый вашим проектом, при сохранении закрытой системы классов.