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