В каком порядке просматривать классы для поиска поля F.v?
[F, D, E, A, B, C] ? [F, D, A, E, B, C] ?
...
Дано:
Необходимо:
Нельзя нарушать внутренний порядок родительских очередей;
Класс-предок может быть в нескольких родительских очередях;
У очередей есть приоритет, соответствующий порядку следования родительских классов при наследовании
0. однозначность
для иерархии классов - однозначный порядок просмотра родительских классов
1. дети раньше родителей
2. родители в порядке объявления при наследовании
class C(A, B):
[...,A,...,B,...]
class C(D):
[...,C,...,D,...]
Добавим очередь из родительских классов!
class A:
class B(A):
class C(A, B):
На графе показана иерархия наследования;
Постепенно перемещаем классы из родительских очередей в итоговую;
На каждом этапе можно перемещать класс, стоящий внизу всех своих очередей;
Если таких классов несколько, выбирается класс из очереди с самым высоким приоритетом.
class A: class B(A): class C(A): class D(A): class E(C, B): class F(D, C): class G(F, E):
Очередь класса F
(первый приоритет)
Очередь класса E
(второй приоритет)
Доп. очередь
(третий приоритет)
Итоговая очередь:
[]
Добавляем F
Итоговая очередь:
[F]
Добавляем D
Итоговая очередь:
[F, D]
Добавляем E
Итоговая очередь:
[F, D, E]
Добавляем C
Итоговая очередь:
[F, D, E, C]
Добавляем B
Итоговая очередь:
[F, D, E, C, B]
Добавляем A