При наследовании от нескольких классов используйте &
символ для указания комбинации суперклассов:
classdef ClassName < SuperClass1 & SuperClass2
Дополнительные сведения о синтаксисе классов см. в разделе Синтаксис подкласса.
При создании подкласса, полученного из нескольких суперклассов, подкласс наследует свойства, методы и события, заданные всеми заданными суперклассами. Если более одного суперкласса задает свойство, метод или событие с таким же именем, должно быть однозначное разрешение для нескольких определений. Вы не можете вывести подкласс из двух или более классов, которые задают несовместимые члены класса.
Вот различные ситуации, когда можно разрешить конфликты имен и определений.
Если два или более суперкласса задают свойство с таким же именем, то хотя бы один из следующих должны быть true:
Все свойства, кроме одного, должны иметь свои SetAccess
и GetAccess
для атрибутов задано значение private
Свойства имеют одно и то же определение во всех суперклассах (для примера, когда все суперклассы унаследовали свойство от общего базового класса)
Если два или более суперкласса задают методы с таким же именем, то хотя бы один из следующих должен быть true:
Метод Access
атрибут private
таким образом, только определяющий суперкласс может получить доступ к методу.
Метод имеет одно и то же определение во всех подклассах. Эта ситуация может возникнуть, когда все суперклассы наследуют метод от общего базового класса, и ни один из суперклассов не переопределяет унаследованное определение.
Подкласс переопределяет метод, чтобы изменить неоднозначность нескольких определений во всех суперклассах. Поэтому методы суперкласса не должны иметь своих Sealed
для атрибута задано значение true
.
Только один суперкласс определяет метод следующим Sealed
в этом случае подкласс принимает определение запечатанного метода.
Суперклассы определяют методы как Abstract
и полагаться на подкласс, чтобы определить метод.
Если два или более суперкласса задают события с таким же именем, то хотя бы один из следующих должны быть true:
Событийный ListenAccess
и NotifyAccess
атрибуты должны быть private
.
Событие имеет одно и то же определение во всех суперклассах (для примера, когда все суперклассы унаследовали событие от общего базового класса)
Разрешение потенциальных конфликтов, связанных с определением подкласса из нескольких классов, часто снижает значение этого подхода. Для примера проблемы могут возникнуть, когда вы усиливаете суперклассы в будущих версиях и вводите новые конфликты.
Уменьшите потенциальные проблемы путем реализации только одного неограниченного суперкласса. Во всех других суперклассах все методы
Резюме
Определяется подклассом
Унаследованный от неограниченного суперкласса
При использовании нескольких наследований убедитесь, что все суперклассы остаются свободными от конфликтов в определении.