Материал, представленный в этом разделе, основывается на понимании следующей информации:
Определение класса может задать список классов, которые оно позволяет как подклассы. Классы не в списке не могут быть заданы как подкласс класса. Чтобы задать позволенные подклассы, используйте 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
Иерархии запечатанного класса позволяют вам использовать уровень абстракции, которой ваш проект требует при обслуживании закрытой системы классов.