继承中的循环层次结构



我目前正在为java编写一个编译器。JLS说"类层次结构必须是非循环的。"但是,的情况又如何呢

            B extends A
            C extends A
            D extends B
            D extends C

这是一个非循环图,但无效。我如何检测这种情况?我目前正在使用BFS,每当我看到后边缘时,我都知道有一个循环,但BFS算法无法检测到上述情况。

D从多个类继承,在Java中不允许多重继承。这就是检测它的方法。

如果您的树表示类继承层次结构,那么在向树中插入新的X extends关系之前,只需添加一个检查,以确保类X还没有extend或其他类。

最新更新