Подклассирование нескольких классов

Задайте несколько суперклассов

При наследовании от нескольких классов используйте & символ для указания комбинации суперклассов:

classdef ClassName < SuperClass1 & SuperClass2

Дополнительные сведения о синтаксисе классов см. в разделе Синтаксис подкласса.

Совместимость членов класса

При создании подкласса, полученного из нескольких суперклассов, подкласс наследует свойства, методы и события, заданные всеми заданными суперклассами. Если более одного суперкласса задает свойство, метод или событие с таким же именем, должно быть однозначное разрешение для нескольких определений. Вы не можете вывести подкласс из двух или более классов, которые задают несовместимые члены класса.

Вот различные ситуации, когда можно разрешить конфликты имен и определений.

Конфликты свойств

Если два или более суперкласса задают свойство с таким же именем, то хотя бы один из следующих должны быть true:

  • Все свойства, кроме одного, должны иметь свои SetAccess и GetAccess для атрибутов задано значение private

  • Свойства имеют одно и то же определение во всех суперклассах (для примера, когда все суперклассы унаследовали свойство от общего базового класса)

Конфликты методов

Если два или более суперкласса задают методы с таким же именем, то хотя бы один из следующих должен быть true:

  • Метод Access атрибут private таким образом, только определяющий суперкласс может получить доступ к методу.

  • Метод имеет одно и то же определение во всех подклассах. Эта ситуация может возникнуть, когда все суперклассы наследуют метод от общего базового класса, и ни один из суперклассов не переопределяет унаследованное определение.

  • Подкласс переопределяет метод, чтобы изменить неоднозначность нескольких определений во всех суперклассах. Поэтому методы суперкласса не должны иметь своих Sealed для атрибута задано значение true.

  • Только один суперкласс определяет метод следующим Sealedв этом случае подкласс принимает определение запечатанного метода.

  • Суперклассы определяют методы как Abstract и полагаться на подкласс, чтобы определить метод.

Конфликты событий

Если два или более суперкласса задают события с таким же именем, то хотя бы один из следующих должны быть true:

  • Событийный ListenAccess и NotifyAccess атрибуты должны быть private.

  • Событие имеет одно и то же определение во всех суперклассах (для примера, когда все суперклассы унаследовали событие от общего базового класса)

Множественное наследование

Разрешение потенциальных конфликтов, связанных с определением подкласса из нескольких классов, часто снижает значение этого подхода. Для примера проблемы могут возникнуть, когда вы усиливаете суперклассы в будущих версиях и вводите новые конфликты.

Уменьшите потенциальные проблемы путем реализации только одного неограниченного суперкласса. Во всех других суперклассах все методы

  • Резюме

  • Определяется подклассом

  • Унаследованный от неограниченного суперкласса

При использовании нескольких наследований убедитесь, что все суперклассы остаются свободными от конфликтов в определении.

Похожие темы