Материалы, представленные в этом разделе, основаны на понимании следующей информации:
Определение класса может указывать список классов, разрешенных в качестве подклассов. Классы, отсутствующие в списке, не могут быть определены как подкласс класса. Чтобы указать допустимые подклассы, используйте AllowedSubclasses атрибут класса.
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.
AllowedSubclasses позволяет определить иерархию запечатанных классов путем запечатывания разрешенных подклассов:
classdef (AllowedSubclasses = {?SubClass1,?SubClass2}) SuperClass ... end
Определите допустимые подклассы как Sealed:
classdef (Sealed) SubClass1 ... end classdef (Sealed) SubClass2 ... end
Запечатанные иерархии классов позволяют использовать уровень абстракции, необходимый для проекта, при сохранении замкнутой системы классов.