30. Mixin-классы

Несмотря на то, что множественное наследование не поддерживается, в скриптах предусмотрен механизм mixin-классов, которые нельзя инстанцировать, но можно использовать в списках наследования для классов, не принадлежащих одной иерархии.
Ключевое слово mixin следует располагать перед ключевым словом class в объявлении класса.
mixin class storage
{
void store(string data)
{
// ...
}

string restore ()
{
// ...
}
}

class farmer : unit, storage
{
// ...
}

class game: storage
{
// ...
}
Здесь класс storage может содержать универсальную реализацию сохранения и восстановления данных в виде методов store и restore.
Эти методы могут быть вызваны в любом из классов, унаследованных от storage.
В mixin-классе можно использовать свойства и методы, которые не определены в самом mixin-классе, но будут определены в производном классе.
Например:
mixin class mix_me
{
void method1()
{
// Присваиваем значение свойству,
// которое в этом классе отсутствует.
prop = 100;
}
}

class beta : mix_me
{
int prop;

beta()
{
method1();
}
}
Методы mixin-класса переопределяют методы суперкласса. (то есть класса, указанного первым в списке наследования).
Свойства mixin-класса, совпадающие со свойствами суперкласса, игнорируются.
Например:
// Mixin-класс.
mixin class mix_me
{
int prop = 99;
// ...
}
// Суперкласс.

class alpha
{
int prop = 66;
// ...
}

// Подкласс.
class beta : alpha, mix_me
{

beta()
{
// Покажет: a = 66.
alert("Информация", "a=" + a);
}
}

Назад | Содержание | Вперёд

Поделитесь с друзьями

WordPress Lessons