Циклическая иерархия в наследовании - PullRequest
1 голос
/ 27 февраля 2012

Я сейчас пишу компилятор для Java.JLS говорит: «Иерархия классов должна быть ациклической».но как насчет случая, когда:

            B extends A
            C extends A

            D extends B
            D extends C

Это ациклический граф, но недействительный, как я могу обнаружить этот случай?В настоящее время я использую BFS, и всякий раз, когда я вижу крайний край, я знаю, что есть цикл, но алгоритм BFS не обнаруживает вышеупомянутый случай.

Ответы [ 2 ]

7 голосов
/ 27 февраля 2012

D наследуется от более чем одного класса, и множественное наследование не разрешено в Java Вот как ты это обнаружил.

0 голосов
/ 27 февраля 2012

Если ваше дерево представляет иерархию наследования классов, просто добавьте проверку, чтобы убедиться, что класс X уже не extend какой-то другой класс, перед вставкой нового отношения X extends в дерево.

...